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的更多相关文章
随机推荐
- CVTE公司面经
1.先是网上测评,通过后通知你参加一面. 2.关于一面:一共进行了10分钟左右,三四个人一起面,没有问什么技术. 一共问了3个问题:a.你为什么选择我们公司的这个职位.我答的大概意思是本科研究生期间, ...
- win7下代替IDM的下载工具
EagleGet 批量下载干刚刚的!!!!! 立马卸载IDM,哈哈哈 下载地址(免费软件) http://pan.baidu.com/s/1ntupiZJ
- HW5.33
import java.util.Calendar; public class Solution { public static void main(String[] args) { long tot ...
- POJ3254 - Corn Fields(状态压缩DP)
题目大意 给定一个N*M大小的土地,土地有肥沃和贫瘠之分(每个单位土地用0,1来表示贫瘠和肥沃),要求你在肥沃的单位土地上种玉米,如果在某个单位土地上种了玉米,那么与它相邻的四个单位土地是不允许种玉米 ...
- Linux江湖01:玩转Linux系统的方法论 (转载)
http://www.blogjava.net/youxia/archive/2015/01/08/linux001.html 2014年上半年,我是在写RCP系列.然后,由于要准备研究生毕业论文和答 ...
- Java注解处理器使用详解
在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor).在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么:然后,我将一步一步实 ...
- 网吧局域网里的设置外网IP地址、设置内网IP地址、限制内网速度和路由器共享
现在啊,网吧的需求越来越高,同时在经济比较充裕的情况下,作为网吧的老板可能希望打造全千兆的网吧,让每个进入网吧的人都能充分体验高速的感觉,当然更重要的是在同行竞争中处于上游,特别是对网络游戏爱好者的吸 ...
- Altium Designer生成网表 导出网表【worldsing笔记】
Design -> Netlist for project -> Protel
- [五]SpringMvc学习-Restful风格实现
1.Restful风格的资源URL 无后缀资源的访问(csdn用法) 2.SpringMvc对Rest风格的支持 2.1将 /*.do改为/ 2.2 3.@PathVariable获取Url变量 @R ...
- MyBatis如何防止SQL注入
转自:http://www.myexception.cn/sql/1938757.html SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转 ...