AsyncTask下载JSON
2016-03-23 21:02
579 查看
public class HttpUtils { // 从网络url上下载字符串 public static String getHttpStr(String url) { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(httpGet);// 发起http请求 if (response.getStatusLine().getStatusCode() == 200) { // 请求成功 HttpEntity entity = response.getEntity(); ByteArrayOutputStream baos = new ByteArrayOutputStream();// 字节数组输出流 InputStream is = entity.getContent(); // 获取输入流 byte[] buffer = new byte[1024]; int ret; while (true) { ret = is.read(buffer); if (ret < 0) { break; } baos.write(buffer, 0, ret); // 读多少、写多少 } return baos.toString(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } }
public class JSONUtils { // 读入json字符串并返回List<String>城市列表 // 格式为 {"citys":["北京","上海","山东","河北","广东"]} public static List<String> parseCityJSONStr(String jsonStr) { try { List<String> listCity = new ArrayList<String>(); // JSON字符串中{}表示JSONObject // 这里创建JSONObject对象 JSONObject jsonObject = new JSONObject(jsonStr); // 根据json对象中冒号前的内容(key)获取冒号后的内容(value) // 后面的内容是JSON数组(JSONArray) JSONArray jsonArr = (JSONArray) jsonObject.get("citys"); // 遍历JSON数组,并把一个一个元素放入List<String>中 for (int i = 0; i < jsonArr.length(); i++) { // 根据下标获取jsonArr中的元素 String city = (String) jsonArr.get(i); listCity.add(city); } return listCity; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
public class MainActivity extends Activity { private Spinner spinner; private String url = "http://10.16.154.26:8080/Web_Product/CityServlet?type=json"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner = (Spinner) findViewById(R.id.spinner); MyTask task = new MyTask(MainActivity.this,spinner); task.execute(url); } }
public class MyTask extends AsyncTask<String, Void, List<String>> { private Context context; private Spinner spinner; public MyTask(Context context, Spinner spinner) { super(); this.context = context; this.spinner = spinner; } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected List<String> doInBackground(String... params) { String jsonStr = HttpUtils.getHttpStr(params[0]); List<String> listCity = JSONUtils.parseCityJSONStr(jsonStr); return listCity; } @Override protected void onPostExecute(List<String> result) { ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1,result); spinner.setAdapter(adapter); super.onPostExecute(result); } }
注:不能在MainActivity类中使用task.get();方法传回结果,因为执行结果较慢,会与后面的执行冲突。
相关文章推荐
- JavaScript 学习
- ArcGIS api for javascript-图层控制
- Angular JS 开发Web应用程序
- js 实现tab选项卡
- JS 基础事件的用法
- JS刷新页面的几种方法
- json详解
- Javascript 模块化学习
- 记忆力发牌游戏
- javascript理解js闭包
- ajax实现jsp页面的动态刷新时间
- javascript中的this关键字小谈
- Js自定义排序
- Extjs 3.X 和 Extjs 4.x 为GridPanel动态添加一行数据的区别
- 利用js获取当前本地时间和服务器时间
- JS 数组去重!!!
- js中的cookie总结
- JS组件系列——图片切换特效:简易抽奖系统
- 类型之间的转换、比较--数字、原始值、对象
- null和undefined