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 ...
随机推荐
- php一些常用函数的理解
mysql_result($res, $row, [$field=0])是获取查询结果集中的 某一个 单元的内容. 其中, $row是行偏移, $field是列偏移, 或者叫索引, 都是从0开始的. ...
- ECMAScript6-下一代Javascript标准
介绍 ECMAScript6是下一代Javascript标准,这个标准将在2015年6月得到批准.ES6是Javascript的一个重大的更新,并且是自2009年发布ES5以来的第一次更新. 它将会在 ...
- SpringMVC关于json、xml自动转换的原理研究
SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC ...
- XSS代码触发条件,插入XSS代码的常用方法
1.脚本插入 (1)插入javascript和vbscript正常字符. 例1:<img src=”javascript:alert(/xss/)”> 例2:<table backg ...
- 关于showModalDialog()对话框点击按钮弹出新页面的问题
页面a.aspx上,单击按钮a,走脚本,弹出showModalDialog("b.aspx",....) 在b.aspx上有个服务器控件按钮b,单击按钮,更新数据后,会弹出一个新的 ...
- zabbix再爆高危SQL注入漏洞,可获系统权限
漏洞概述 zabbix是一个开源的企业级性能监控解决方案.近日,zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者无需授权登陆即可登陆zabbix管理系统 ...
- Unity3d iOS基本优化和高级优化
原地址:http://www.cocoachina.com/bbs/read.php?tid=70395&page=1 分享看见的2篇好文.简单翻译了一下并且放出原文 http://www.c ...
- Linux / UNIX create soft link with ln command
How to: Linux / UNIX create soft link with ln command by NIXCRAFT on SEPTEMBER 25, 2007 · 42 COMMENT ...
- 极客教学:如何使用树莓派击落&劫持无人机
本教程的目的是帮助大家理解如何研究未受保护的无线通信的安全风险所在,同时我们希望大家不要对技术进行滥用.我们这里采用的例子是一个流行的无人机模型:Parrot AR.Drone 2.0. 四轴无人机能 ...
- 2015安徽省赛 B.求和
题目描述 对于正整数n,k,我们定义这样一个函数f,它满足如下规律 现在给出n和k,你的任务就是要计算f(n,k)的值. 输入 首先是一个整数T,表示有T组数据 接下来每组数据是n和k(1<=n ...