Android_AsyncTask_json
<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的更多相关文章
随机推荐
- -Xms 和 -Xmx 不能设置的太大
之前我一直有一个疑问,就是-Xms 和 -Xmx不是设置的越大越好吗?现在才明白怎么回事. 通过在命令行中执行 java 或者启动某种基于 Java 的中间件来运行 Java 应用程序时,Java 运 ...
- MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目. 完全按照MVC模式,后面有一个MVC的理解示意图. 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册.登录 ...
- 导入showb时候出错--2015-12-4
[root@cache-02 ~]# /opt/coreseek/csftweb-bash: /opt/coreseek/csftweb: is a directory[root@cache-02 ~ ...
- 50道经典的JAVA编程题(41-45)
50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- leetcode@ [116/117] Populating Next Right Pointers in Each Node I & II (Tree, BFS)
https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ Follow up for problem ...
- c语言中格式化输出函数的研究
<一>; 1.前言 在gcc编程中,我们比较经常用到的字符格式化输出函数是printf的,实际上gcc继承了c语言处理字符具有强大功能的风格,它提供了一系列的格式化输出函数,主要存在两个库 ...
- ubuntu下PHP支持cURL
公司项目需要,注册需要验证手机号码,其中需要LAMP支持cURL.由于事先安装平台的时候,并没有注意到这一点,所以编译PHP5的时候,并没有使用参数--with-curl.后来需要的时候,查一些参考方 ...
- tcp/udp socket编程异同
一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 ...
- [iOS基础控件 - 4.2] APP列表 字典转模型Model
A.使用字典加载数据的缺点 1.用户自行指定key,容易出错 2.存入.取出都需要key,容易混乱 B.模型 (MVC中的model) 1.字典与模型对比: (1)字典:存储数据,通过字符串类型的 ...