<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"/> </RelativeLayout>

UpdateData.java

package com.example.day07_asynctask_json;

import java.util.List;

public interface UpdateData {
public void updataNewView(List<String>list);
}

HttpUtils.java

package com.example.day07_utils;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; public class HttpUitls {
//获得字符串
public static String getJsonDataByInternet(String path){
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(path);
HttpResponse httpResponse = httpClient.execute(httpGet);
if(200 == httpResponse.getStatusLine().getStatusCode()){
HttpEntity entity = httpResponse.getEntity();
String jsonData = EntityUtils.toString(entity);
return jsonData;
} } catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return path;
}
}

ParserData.java

package com.example.day07_parser;

import java.util.ArrayList;
import java.util.List; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class ParserData { public static List parserDada(String data){
try { JSONObject jsonObject = new JSONObject(data);
JSONArray jsonArray = jsonObject.getJSONArray("results");
List<String> list = new ArrayList<String>();
String name;
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
name = jsonObject2.getString("namecn");
list.add(name);
}
return list;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null; }
}

main.java

package com.example.day07_asynctask_json;

import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
/**
* 网络解析json数据并显示在spinner中
* 1.初始化控件
* 2.初始化数据
* 1.创建异步任务
* 2.网络请求数据获取得json字符串
* 3.解析json数据存到list集合
* 4.将list传给主线程
* 3.创建适配器
* 4.适配器控件设置适配器
* @author my
*注意:需要在清单文件中添加网络权限
*/
public class MainActivity extends Activity implements UpdateData{ private Spinner spinner;
private static final String path = "http://openapi.db.39.net/app/GetDrugCompany?sign=9DFAAD5404FCB6168EA6840DCDFF39E5&app_key=app"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
spinner = (Spinner) findViewById(R.id.spinner); //创建异步任务类
/**
* 第一种方式:将上下文与适配器控件当作参数传给异步任务类
*/
// new MyAsyncTask(spinner,MainActivity.this).execute(path); /**
* 第二种 在MainActivity中创建方法updataData(List<String> list)来更新数据
*/
// new MyAsyncTask(MainActivity.this).execute(path); /**
* 第三种方式:将更新数据的方法抽取成一个接口,让本类实现其抽象方法updataNewView(List<String>list)
*
*/
// new MyAsyncTask(MainActivity.this).execute(path); /**
* 第四种方式:实例化接口作为参数传入,并实现方法,在任务类中调用此方法,获得数据
* 该方式大大降低了任务类与MainActivity的耦合性,俗称接口回调
*/
new MyAsyncTask(MainActivity.this,new UpdateData() { @Override
public void updataNewView(List<String> list) {
// TODO Auto-generated method stub
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
spinner.setAdapter(adapter);
}
}).execute(path);
}
public void updataData(List<String> list){
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
spinner.setAdapter(adapter); }
@Override
public void updataNewView(List<String> list) {
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, list);
spinner.setAdapter(adapter);
}
}

MyAsyncTask.java

package com.example.day07_asynctask_json;

import java.util.List;

import com.example.day07_parser.ParserData;
import com.example.day07_utils.HttpUitls; import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Spinner; public class MyAsyncTask extends AsyncTask<String, Integer, List<String>> {
private Spinner spinner;
private Context context;
private UpdateData updateData;
public MyAsyncTask(Context context){
this.context = context;
}
public MyAsyncTask(Spinner spinner,Context context){
this.spinner = spinner;
this.context = context;
}
public MyAsyncTask(Context context,UpdateData updateData){
this.context = context;
this.updateData = updateData;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected List<String> doInBackground(String... params) {
// 2.网络请求数据获取得json字符串
// 3.解析json数据存到list集合
// 4.将list传给主线程
String jsonData = HttpUitls.getJsonDataByInternet(params[0]);
List<String>list = ParserData.parserDada(jsonData);
// Log.i("MainActivity", list.toString());
return list; }
/**在主线程中执行以下代码
* 第一种方式,直接执行以下代码
*/
/* @Override
protected void onPostExecute(List<String> result) {
super.onPostExecute(result);
//创建适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, result);
spinner.setAdapter(adapter); }*/
/**
* 第二,三种方式,使用MainActivity对象调用其方法
*
*/
/* @Override
protected void onPostExecute(List<String> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//((MainActivity)context).updataData(result);//第二三种
}*/ /**
* 第四种方式:使用接口实例化对象调用其方法,降低了与MainActivity的耦合度
*/
@Override
protected void onPostExecute(List<String> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
updateData.updataNewView(result);
}
}

Android_AsyncTask_json的更多相关文章

随机推荐

  1. Mtom Encoding in WCF

    http://www.codeproject.com/Articles/632101/Mtom-Encoding-in-WCF http://msdn.microsoft.com/zh-cn/libr ...

  2. (转载)linux环境变量

    转自:http://www.cnblogs.com/growup/archive/2011/07/02/2096142.html Linux 的变量可分为两类:环境变量和本地变量 环境变量,或者称为全 ...

  3. HNU OJ10086 挤挤更健康 记忆化搜索DP

    挤挤更健康 Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 339, A ...

  4. QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel

    [关于如何打包自己开发的程序为安装包,可以参考http://www.cnblogs.com/yuliyang/p/4242179.html] [简要功能介绍] 使用sqlite数据库和Qt搭建界面,实 ...

  5. viedeo

    http://download.farsight.com.cn/download/Android.htm

  6. NOIP2010 机器翻译

    1机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单 ...

  7. HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口

    1.在hibernate中持久化对象有三个状态,这个面试时可能会问到: (1)transient瞬时态:在数据库中没有与之匹配的数据,一般就是只new出了这个对象,并且在session缓存中也没有即此 ...

  8. 解决outlook无法启动

    当outlook出现上述问题时,修复的方案: 1.在打开的命令提示符窗口中,输入"cd C:\Program Files\Microsoft Office\Office12"然后回 ...

  9. angularjs 中ie兼容性的问题收集

    今天在项目中做ie8的兼容的时候,发现angularjs中一些内容这样写有问题,那样写就没有问题了,自己记录一下内容: 如果遇到了ie8中使用$http.post请求不到数据的时候,以下的方法是获取不 ...

  10. Codeforces Round #138 (Div. 2) ACBDE

    A.Parallelepiped 题意:给一个六面体三面的面积,求12条边的长度和. 题解:因为都是整数,设边长分别为a,b,c,面积为xyz,那么可设x=a*b,y=b*c,z=c*a,简单解方程就 ...