<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. ASDL + WN725N 配置无线AP

    1.  ASDL 正常拨号上网 2.  安装TP-LINK无线客户端应用程序 打开之后选择模拟AP 如下图设置----应用 3.  本地连接----属性----高级 如下图设置 4.  宽带连接--- ...

  2. JSON 格式的转换: 数组、字符串、List集合、DataTable,实体对象

    JSON验证工具:http://jsonlint.com/JSON简明教程:http://www.w3school.com.cn/json/Newtonsoft.Json类库下载:http://jso ...

  3. MapReduce自定义二次排序流程

    每一条记录开始是进入到map函数进行处理,处理完了之后立马就入自定义分区函数中对其进行分区,当所有输入数据经过map函数和分区函数处理完之后,就调用自定义二次排序函数对其进行排序. MapReduce ...

  4. java 压缩技术

    package zip; import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStr ...

  5. xerox Network system

    XNS协议 IPX/SPX 是基于施乐的XEROX’S Network System(XNS)协议,而SPX是基于施乐的XEROX’S SPP(Sequenced Packet Protocol:顺序 ...

  6. HDU5791--Two (DP)

    题意:两个数列a,b,求相同的子序列有多少对,内容相同位置不同也算不同. 题解:dp[i][j]表示a数列前i个数个 b数列前j个数 有多少对 递推方程: dp[i][j] = dp[i-1][j-1 ...

  7. SAP:建表时如果有QUAN、CURR类型的字段不能激活的问题

    建表时如有一个QUAN类型的字段,那么就要给字段设置Reference field,参考的字段的Data Type要是UNIT, 并设置对应的Reference table,也就是参考字段所在的tab ...

  8. iOS - Xcode升级到5.1& iOS升级到iOS7.1问题:Undefined symbols for architecture x86_64

    Xcode升级到5.1 新特性之一就是默认让所有App都通过64位编译器编译.原来在Xcode5.0.x的时候默认的Standard architectures只有(arm7,armv7s),到5.1 ...

  9. C# 产生随机密码

    using System.Web.Security var rawPassword = System.Web.Security.Membership.GeneratePassword(10,1) re ...

  10. 转载StringBuilder说明

    动态串StringBuilder 利用System.Text.StringBuilder类实现动态字符串,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接在原来 ...