方法一:AsyncTask 看代码
package com.blogchina.activity;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.blogchina.activity.R;
import com.blogchina.utils.HttpUtil;
import com.fedorvlasov.lazylist.LazyAdapter;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class HomelistActivity extends Activity{
static final int MENU_MANUAL_REFRESH = 0;
static final int MENU_DISABLE_SCROLL = 1;
static final int MENU_SET_MODE = 2;
static final int MENU_DEMO = 3;
LazyAdapter lazyAdapter;
HttpUtil httpUtil = new HttpUtil();
private PullToRefreshListView pullToRefreshListView;
private ArrayList> data;
final private String url = "http://*****/article/lists/is_only_pic/2/is_show_summary/1/limit/20";
private ProgressDialog loadingDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homelist);
loadingDialog = new ProgressDialog(this);
loadingDialog.setTitle("");
loadingDialog.setMessage("正在加载,请稍候");
//listView = (ListView) findViewById(R.id.hl_listView);
pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list);
pullToRefreshListView.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(PullToRefreshBase refreshView) {
// TODO Auto-generated method stub
String label = DateUtils.formatDateTime(getApplicationContext(), System.currentTimeMillis(),
DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
// Update the LastUpdatedLabel
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
new MyTask().execute(url);
//loadingDialog.show();
}
});
// Add an end-of-list listener
pullToRefreshListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
Toast.makeText(HomelistActivity.this, "已经是最后一页了!", Toast.LENGTH_SHORT).show();
}
});
loadingDialog.show();
new MyTask().execute(url);
//listView.setOnItemClickListener(new MyOnItemClickListener());
pullToRefreshListView.setOnItemClickListener(new MyOnItemClickListener());
}
/**
* 内部类,click item 传参跳转
* @author entere
*
*/
private class MyOnItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
ListView actualListView = pullToRefreshListView.getRefreshableView();
@SuppressWarnings("unchecked")
HashMap map = (HashMap) actualListView.getItemAtPosition(arg2);
Intent intent = new Intent();
intent.setClass(HomelistActivity.this, DetailActivity.class);
intent.putExtra("detail_bid", map.get("hli_bid").toString());
intent.putExtra("detail_name", map.get("hli_name").toString());
startActivity(intent);
}
}
/**
* 异步操作,并更新主ui
* @author entere
*
*/
private class MyTask extends AsyncTask>> {
//任务执行之前的操作
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
//loadingDialog.show();
}
//在后台完成解析json操作
@Override
protected ArrayList> doInBackground(String... params) {
// TODO Auto-generated method stub
String jsonString = httpUtil.getHttpJson(params[0]);
data = parseJsonMulti(jsonString);
return data;
}
//完成任务之后更新ui
@Override
protected void onPostExecute(ArrayList> result) {
// TODO Auto-generated method stub
if(result.size()<1) {
Toast.makeText(HomelistActivity.this, "亲,网络很不给力哦!", Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
lazyAdapter = new LazyAdapter(HomelistActivity.this, result);
pullToRefreshListView.setAdapter(lazyAdapter);
pullToRefreshListView.onRefreshComplete();
loadingDialog.dismiss();
}
}
//解析json
private ArrayList> parseJsonMulti(String string) {
ArrayList> arrayList = new ArrayList>();
try {
//JSONArray jsonObjs = new JSONObject(string.toString()).getJSONArray("article_list");
JSONObject jsonObject = new JSONObject(string);
JSONArray jsonArray = jsonObject.getJSONArray("article_list");
for(int i=0; i hashMap = new HashMap();
JSONObject obj = jsonArray.getJSONObject(i);
Object hli_bid = obj.get("article_id");
Object hli_name = obj.get("user_name");
Object hli_title = obj.get("article_title");
Object hli_summary = obj.get("article_summary");
Object hli_pubdate = obj.get("article_pubdate");
Object hli_image = obj.get("article_pic");
hashMap.put("hli_bid", hli_bid);
hashMap.put("hli_name", hli_name);
hashMap.put("hli_title", hli_title);
hashMap.put("hli_summary", hli_summary);
hashMap.put("hli_pubdate", hli_pubdate);
hashMap.put("hli_image", hli_image);
arrayList.add(hashMap);
}
return arrayList;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arrayList;
}
}
方法二:Runnable+handler
package com.blogchina.activity;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.blogchina.activity.R;
import com.blogchina.utils.HttpUtil;
import com.fedorvlasov.lazylist.LazyAdapter;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ListView;
public class BloglistActivity extends ListActivity{
LazyAdapter adapter;
HttpUtil httpUtil;
MyHandler myHandler;
private ListView listView;
private ArrayList> data;
final private String url = "http://********/article/lists/is_only_pic/2/is_show_summary/1/limit/20";
private ProgressDialog loadingDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bloglist);
loadingDialog = ProgressDialog.show(this, "", "加载中……");
listView = (ListView) findViewById(R.id.bl_listView);
myHandler = new MyHandler();
MyTheard myTheard = new MyTheard();
new Thread(myTheard).start();
}
class MyHandler extends Handler {
public MyHandler() {
// TODO Auto-generated constructor stub
}
public MyHandler(Looper L) {
super(L);
}
@Override
public void handleMessage(Message message){
super.handleMessage(message);
Bundle b = message.getData();
String jsonStr = b.getString("jsonData");
data = parseJsonMulti(jsonStr);
adapter = new LazyAdapter(BloglistActivity.this, data);
listView.setAdapter(adapter);
loadingDialog.dismiss();
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
@SuppressWarnings("unchecked")
HashMap map = (HashMap) listView.getItemAtPosition(arg2);
Intent intent = new Intent();
intent.setClass(BloglistActivity.this, DetailActivity.class);
intent.putExtra("detail_bid", map.get("bli_bid").toString());
intent.putExtra("detail_name", map.get("bli_name").toString());
startActivity(intent);
}
});
}
}
class MyTheard implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
httpUtil = new HttpUtil();
Bundle bundle = new Bundle();
bundle.putString("jsonData", httpUtil.getHttpJson(url));
Message message = new Message();
message.setData(bundle);
BloglistActivity.this.myHandler.sendMessage(message);
}
}
private ArrayList> parseJsonMulti(String string) {
ArrayList> arrayList = new ArrayList>();
try {
//JSONArray jsonObjs = new JSONObject(string.toString()).getJSONArray("article_list");
JSONObject jsonObject = new JSONObject(string);
JSONArray jsonArray = jsonObject.getJSONArray("article_list");
for(int i=0; i hashMap = new HashMap();
JSONObject obj = jsonArray.getJSONObject(i);
Object bli_bid = obj.get("article_id");
Object bli_name = obj.get("user_name");
Object bli_title = obj.get("article_title");
Object bli_summary = obj.get("article_summary");
Object bli_pubdate = obj.get("article_pubdate");
Object bli_image = obj.get("article_pic");
hashMap.put("bli_bid", bli_bid);
hashMap.put("bli_name", bli_name);
hashMap.put("bli_title", bli_title);
hashMap.put("bli_summary", bli_summary);
hashMap.put("bli_pubdate", bli_pubdate);
hashMap.put("bli_image", bli_image);
arrayList.add(hashMap);
}
return arrayList;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return arrayList;
}
}