异步获取web参数加载到spinner

这里主要是介绍一个异步加载网络数据的例子:

public class MainActivity1 extends Activity {
	private Spinner spinner;
	private ProgressDialog progress;
	private ArrayAdapter adapter;
	private final String PATH = "http://192.168.0.104:8080/GsonJieXi/servlet/ServletPost";
	private final String code = "utf-8";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		spinner = (Spinner) findViewById(R.id.spinner);
		progress = new ProgressDialog(this);
		progress.setTitle("提示");
		progress.setMessage("正在下载。。。");
		progress.setCancelable(false);
		new AsnTask().execute(PATH);
	}

	public class AsnTask extends AsyncTask<String, Integer, List<String>> {
		@Override
		protected void onPreExecute() {
			// TODO Auto-generated method stub
			super.onPreExecute();
			progress.show();
		}

		@Override
		protected List<String> doInBackground(String... params) {
			List<String> result = null;
			// 调用工具方法获取web端的数据
			String jsonString = HttpClientTool1.getpost(params[0], code);
			// 调用工具方法解析数据
			result = ListTool1.sentList(jsonString);
			return result;
		}

		@Override
		protected void onPostExecute(List<String> result) {
			super.onPostExecute(result);
			// 加载参数
			adapter = new ArrayAdapter(MainActivity1.this,
					android.R.layout.simple_spinner_item, result);
			spinner.setAdapter(adapter);
			// 取消ProgressDialog
			progress.dismiss();
		}
	}
}
下面说下工具类:

public class HttpClientTool1 {
	public static String getpost(String path,String encode){
		String jsonString="";
		HttpClient httpClient=new DefaultHttpClient();
		HttpPost post=new HttpPost(path);
		try {
			HttpResponse response=httpClient.execute(post);
			if(response.getStatusLine().getStatusCode()==200){
               //EntityUtils静态的助手处理实体  
              //这里主要是响应内容
				jsonString=EntityUtils.toString(response.getEntity(), encode);
				Log.e("jsonString", jsonString);
			}
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			httpClient.getConnectionManager().shutdown();
		}
		return jsonString;
	}

}

public class ListTool1 {
public static List<String> sentList(String jsonString){
	List<String> list=new ArrayList<String>();
	try {
       //JSONObject是一个无序的名称/值对的集合。
      //它的外形是一个字符串用花括号名称和值之间用冒号,和逗号之间的价值观和名称
		JSONObject object=new JSONObject(jsonString);
        //jsonarray是一个有序序列的值。其外部文本形式是一个字符串用逗号分隔的值用方括号。
      //内部形式是一个对象获得,通过索引访问的值选择方法,并将方法添加或替换值
		JSONArray jsonArray = object.getJSONArray("citys");
		for(int i=0;i<jsonArray.length();i++){
			list.add(jsonArray.getString(i));
		}
	} catch (JSONException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return list;
}
}

下面我介绍一下web端的代码

先介绍一下Servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
       //调用DateSource类的 方法
		List<String> list = DateSource.getCityList();
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		map.put("citys", list);
       //调用GsonTools工具类
		String jsonString = GsonTools.createJsonString(map);
		out.print(jsonString);
		out.flush();
		out.close();
	}
下面介绍一下工具类及其一些其他类 :

public class DateSource {

	public static List<String> getCityList(){
		List<String> list=new ArrayList<String>();
		list.add("苹果");
		list.add("香蕉");
		list.add("梨子");
		list.add("西瓜");
		return list;
	}
}

下面的工具类需要导入Gson的包

public class GsonTools {

	// 灏咼SON杞琒tring--------------------------------------------------
	public static String createJsonString(Object value) {
		Gson gson = new Gson();
		String gString = gson.toJson(value);

		return gString;
	}

	// 灏哠tring杞琂SON--------------------------------------------------

	public static <T> T getPerson(String jsonString, Class<T> cls) {
		T t = null;
		try {
			Gson gson = new Gson();
			t = gson.fromJson(jsonString, cls);
		} catch (Exception e) {
		}
		return t;
	}

	/**
	 * 浣跨敤Gson杩涜瑙f瀽 List<Person>
	 */
	public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
		List<T> list = new ArrayList<T>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
			}.getType());
		} catch (Exception e) {
		}
		return list;
	}

	/**
	 * @param jsonString
	 * @return
	 */
	public static List<String> getList(String jsonString) {
		List<String> list = new ArrayList<String>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
			}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

	public static List<Map<String, Object>> listKeyMaps(String jsonString) {
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		try {
			Gson gson = new Gson();
			list = gson.fromJson(jsonString,
					new TypeToken<List<Map<String, Object>>>() {
					}.getType());
		} catch (Exception e) {
			// TODO: handle exception
		}
		return list;
	}

}
无图无真相  最后展示一下结果.

首先是web端运行结果:








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值