AsyncTask加载网络Json及其解析Json

AsyncTask加载网络Json及其解析Json———Thread和AsyncTask加载图片2种方式

源码

首先看主线程布局

activity_main.xml(里面只有一个listview)

<RelativeLayout xmlns:android=""xmlns:tools=""android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.myasynctask.MainActivity" ><ListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="fill_parent" ></ListView></RelativeLayout>接下来看listview中的每个条目layout(有个图片,还有一个title,一个content内容区域)

listview_item.xml

<LinearLayout xmlns:android=""xmlns:tools=""android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="4dp" ><ImageViewandroid:id="@+id/iv_imageview"android:layout_width="64dp"android:layout_height="64dp"android:src="@drawable/ic_launcher" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="26.45"android:gravity="center"android:orientation="vertical"android:paddingLeft="4dp" ><TextViewandroid:id="@+id/tv_title"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:text="title" /><TextViewandroid:id="@+id/tv_content"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:text="content" /></LinearLayout></LinearLayout>

这里先看下慕课网的json地址?type=4&num=30

以及json的大概意思—只是贴出一部分

{"status": 1,"data": [{"id": 1,"name": "Tony老师聊shell——环境变量配置文件","picSmall": "","picBig": "","description": "为你带来shell中的环境变量配置文件","learner": 12312},接下来看本地的对象

NewsBean

package com.example.myasynctask;public class NewsBean {public String title;public String content;public String imageViewUrl;public NewsBean(String title, String content, String imageViewUrl) {super();this.title = title;this.content = content;this.imageViewUrl = imageViewUrl;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getImageViewUrl() {return imageViewUrl;}public void setImageViewUrl(String imageViewUrl) {this.imageViewUrl = imageViewUrl;}public NewsBean() {super();// TODO Auto-generated constructor stub}}

接下来看主布局代码

MainActivity

package com.example.myasynctask;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONObject;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.widget.ListView;public class MainActivity extends Activity {//获取listview控件private ListView listView;//慕课网的Json字符串private String jsonUrl = "?type=4&num=30";//加载Json字符串到本地,并且解析为本地对象数组private List<NewsBean> newBeanlist;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化listview控件listView = (ListView) findViewById(R.id.listview);//开启异步任务,传递慕课网jsonUrl进行网络异步加载任务new MyAsyncTask().execute(jsonUrl);}/** * 创建异步任务, * 参数:慕课网的jsonHttp地址 * Void没有进度显示为Void * 返回本地对象集合 * */class MyAsyncTask extends AsyncTask<String, Void, List<NewsBean>> {@Overrideprotected List<NewsBean> doInBackground(String… params) {//构建一个方法,进行网络json字符串获取,并且解析为本地对象集合return getJsonData(jsonUrl);}@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected void onPostExecute(List<NewsBean> result) {super.onPostExecute(result);//解析完毕后,进行适配器的数据设置填充JsonAdapter adapter = new JsonAdapter(MainActivity.this, newBeanlist);listView.setAdapter(adapter);}@Overrideprotected void onProgressUpdate(Void… values) {}}/** * //构建一个方法,进行网络json字符串获取,并且解析为本地对象集合 * @param jsonUrl * @return */public List<NewsBean> getJsonData(String jsonUrl) {try {//创建url http地址URL httpUrl = new URL(jsonUrl);//打开http 链接HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection();//设置参数 请求为get请求connection.setReadTimeout(5000);connection.setRequestMethod("GET");//connection.getInputStream()得到字节输入流,InputStreamReader从字节到字符的桥梁,外加包装字符流BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));//创建字符串容器StringBuffer sb = new StringBuffer();String str = "";//行读取while ((str = bufferedReader.readLine()) != null) {// 当读取完毕,就添加到容器中sb.append(str);}//测试是否得到json字符串Log.e("TAG", ""+sb.toString());//创建本地对象的集合newBeanlist = new ArrayList<NewsBean>();// 整体是一个jsonObjectJSONObject jsonObject = new JSONObject(sb.toString());// 键是jsonArray数组JSONArray jsonArray = jsonObject.getJSONArray("data");for (int i = 0; i < jsonArray.length(); i++) {//获取jsonArray中的每个对象JSONObject jsonObject2 = jsonArray.getJSONObject(i);//创建本地的newsBean对象NewsBean newsBean = new NewsBean();//为该对象进行属性值的设置操作newsBean.imageViewUrl = jsonObject2.getString("picSmall");newsBean.title = jsonObject2.getString("name");newsBean.content = jsonObject2.getString("description");//添加对象,组建集合newBeanlist.add(newsBean);}} catch (Exception e) {e.printStackTrace();}return newBeanlist;}}接下来看适配器

JsonAdapter

是不是因为心痛的麻木了,我才笑得最美丽。

AsyncTask加载网络Json及其解析Json

相关文章:

你感兴趣的文章:

标签云: