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的更多相关文章

  1. Android开发之从网络URL上下载JSON数据

    网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...

  2. Android 异步任务——AsyncTask (附使用AsyncTask下载图片Demo)

    我们编程的时候经常需要处理同步任务和异步任务,在Android里面存在一个特性,就是UI线程是不安全的线程.所谓UI线程不安全也就是我们的主线程(进程启动的第一个线程)不能在线程外操作主线程的资源.因 ...

  3. android 多线程 AsyncTask 下载图片

    AsyncTask 下载图片 package com.test.network; import android.graphics.Bitmap; import android.graphics.Bit ...

  4. AsyncTask下载网络图片

    MyTask task = new MyTask(); task.execute(url); class MyTask extends AsyncTask<String, Integer, Bi ...

  5. Android测试AsyncTask下载图片

    package com.example.myact8_async; import org.apache.http.HttpEntity; import org.apache.http.HttpResp ...

  6. Android初学-AsyncTask下载网络图片

    AsyncTask 异步处理: mainfest: 注意添加的: -------------------- <uses-permission android:name="android ...

  7. Android 用AsyncTask下载网络图片并显示百分比

    1.添加布局文件:activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ...

  8. AsyncTask下载图片

    最近在看一个非常早期曾经写过代码,装上去召回.本文首先召回AsyncTask的基本使用.   AsyncTask说简单点就是 开启一个线程.而且把结果提交给ui线程. Thread+Handler,只 ...

  9. AsyncTask下载网络图片的简单应用

    1.imageTest package lpc.com.asynctaskdemo; import android.app.Activity; import android.graphics.Bitm ...

随机推荐

  1. ASP.NET WebForm中用async/await实现异步出人意料的简单

    1. 在.aspx中添加异步标记 <%@ Page Language="C#" Async="true"%> 2. 在.aspx.cs或者.ascx ...

  2. [Angularjs]angular ng-repeat与js特效加载先后导致的问题

    写在前面 最近在项目中遇到这样的一个前端的bug,在ng-repeat中绑定的图片,有一个晃动的特效,在手机端浏览的时候,图片有时候会正常展示,有时就展示不出来.当时猜测是因为angularjs与特效 ...

  3. (8)UI(控件)

    1.按钮:   按钮是游戏中最常用的控件类型之一,控制用户点击事件的开关,有正常.按下.禁用三种状态,您可以为他们设置样式及文本.   使用场景   按钮的使用十分普遍,以官方示例中的主场景示例为例, ...

  4. FineUI第四天---PageManage的概述

    页面级别的配置PageManager控件的配置 每一个使用FineUI控件的页面都必须包含一个PageManager控件,我们可以把PageManager控件看做页面级别的参数配置(相对于Web.co ...

  5. django-jinjia 集成

    现成包可以参考这里:  http://niwibe.github.io/django-jinja/ Requirements Python 2.7, 3.3 or 3.4 Django 1.4, 1. ...

  6. mysql sql维护常用命令

    mysql修改表名,列名,列类型,添加表列,删除表列 alter table test rename test1; --修改表名 alter table test add  column name v ...

  7. Longest Common Subsequence & Substring & prefix

    Given two strings, find the longest common subsequence (LCS). Your code should return the length of  ...

  8. MYSQL集群的搭建

    按照此配置完全可以配置成功!! 一.介绍========测试环境:Server1:ndbd 192.168.1.225Server2:ndbd 192.168.1.226Server3:mysqld ...

  9. php中正则表达式的匹配和数据验证总结

    正则表达式能匹配复杂的字符串形式,比字符串处理函数功能更加多,只不过执行效率有所降低,但是可以实现非常复杂的匹配,下面总结一下 1.简单的字符串匹配,判断指定字符串是不是在另一个字符串中,和字符串查找 ...

  10. canvas API ,通俗的canvas基础知识(三)

    全文说到了三角形,圆形等相关图形的画法,不熟悉的同学可以出门右转,先看看前文,接下来继续我们的图形——曲线. 学过数学,或者是比较了解js 的同学都知道贝塞尔曲线,当然,在数学里面,这是一门高深的学问 ...