AsyncTask下载JSON
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();方法传回结果,因为执行结果较慢,会与后面的执行冲突。
AsyncTask下载JSON的更多相关文章
- Android开发之从网络URL上下载JSON数据
网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...
- Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)
我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...
- android 多线程 AsyncTask 下载图片
AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...
- AsyncTask下载网络图片
MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...
- Android测试AsyncTask下载图片
package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...
- Android初学-AsyncTask下载网络图片
AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...
- Android 用AsyncTask下载网络图片并显示百分比
1.添加布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ...
- AsyncTask下载图片
最近在看一个非常早期曾经写过代码,装上去召回.本文首先召回AsyncTask的基本使用. AsyncTask说简单点就是 开启一个线程.而且把结果提交给ui线程. Thread+Handler,只 ...
- AsyncTask下载网络图片的简单应用
1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...
随机推荐
- Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...
- win7电脑安装wamp出现httpd.exe无法找到组件MSVCR100.dll的解决办法
昨天重新安装了系统,今天想装一个wamp,在安装过程中报httpd.exe无法找到组件 如图u 运行wamp,发现图标是黄色的,apache没有选中,测试80端口也未被占用. 重新卸载了,又安装了一遍 ...
- 看了让人笑了很多很多次的NB的痔疮经历
前言 这篇杂记其实是去年也就是 2013年9月30日转载的,后来在整理博客分类时七弄八弄误删掉了好多文章,就包括这一篇.今天,2014年9月29日,恰好恰好一年的时候居然在好久未登陆的 OneNote ...
- Who Gets the Most Candies?(线段树 + 反素数 )
Who Gets the Most Candies? Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d &am ...
- Rescue
1039: Rescue Time Limit: 1 Sec Memory Limit: 32 MBSubmit: 1320 Solved: 306 Description Angel was c ...
- Spring+Quartz实现定时任务的配置方法
1.Scheduler的配置 <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" ...
- [ZJOI3527][Zjoi2014]力
[ZJOI3527][Zjoi2014]力 试题描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi.试求Ei. 输入 包含一个整数n,接下来n行每行输入一个数,第i行表示qi. 输出 有n ...
- HDOJ 1233
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- Java--读写文件综合
package javatest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...
- nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 56; cvc-complex-type.2.4.c通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明
严重: Exception sending context initialized event to listener instance of class org.springframework.we ...