android listview asynctask,android - 带有android的ListView-Howto AsyncTask?

我是android新手。我想要一个ListView并从json获取数据。我发现了很多教程,但它们没有AsyncTask。

我不知道如何将AsyncTask添加到该代码中!package de.test.ListView;

import java.util.ArrayList;

import java.util.HashMap;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.ListActivity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MeinListViewActivity extends ListActivity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.listplaceholder);

ArrayList> mylist = new ArrayList>();

JSONObject json = jsonFunctions.getJSONfromURL("http://api.geonames.org/earthquakesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&username=demo");

try{

JSONArray earthquakes = json.getJSONArray("earthquakes");

for(int i=0;i

HashMap map = new HashMap();

JSONObject e = earthquakes.getJSONObject(i);

map.put("id", String.valueOf(i));

map.put("name", "Earthquake name:" + e.getString("eqid"));

map.put("magnitude", "Magnitude: " + e.getString("magnitude"));

mylist.add(map);

}

}catch(JSONException e) {

Log.e("log_tag", "Error parsing data "+e.toString());

}

ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main,

new String[] { "name", "magnitude" },

new int[] { R.id.item_title, R.id.item_subtitle });

setListAdapter(adapter);

final ListView lv = getListView();

lv.setTextFilterEnabled(true);

lv.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView> parent, View view, int position, long id) {

@SuppressWarnings("unchecked")

HashMap o = (HashMap) lv.getItemAtPosition(position);

Toast.makeText(MeinListViewActivity.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_SHORT).show();

}

});

}

}

和jsonFunctions

package de.test.ListView;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.json.JSONException;

import org.json.JSONObject;

import android.util.Log;

public class jsonFunctions {

public static JSONObject getJSONfromURL(String url){

InputStream is = null;

String result = "";

JSONObject jArray = null;

//http post

try{

HttpClient httpclient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(url);

HttpResponse response = httpclient.execute(httppost);

HttpEntity entity = response.getEntity();

is = entity.getContent();

}catch(Exception e){

Log.e("log_tag", "Error in http connection "+e.toString());

}

//convert response to string

try{

BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);

StringBuilder sb = new StringBuilder();

String line = null;

while ((line = reader.readLine()) != null) {

sb.append(line + "\n");

}

is.close();

result=sb.toString();

}catch(Exception e){

Log.e("log_tag", "Error converting result "+e.toString());

}

try{

jArray = new JSONObject(result);

}catch(JSONException e){

Log.e("log_tag", "Error parsing data "+e.toString());

}

return jArray;

}

}

最佳答案

您可以使用我的代码与Gson取得联系public void executeHttpGet() throws Exception {

BufferedReader in = null;

try {

HttpClient client = new DefaultHttpClient();

HttpGet request = new HttpGet();

request.setURI(new URI(

"http://cardsplatform.appspot.com/cardeckplatform_details"));

HttpResponse response = client.execute(request);

in = new BufferedReader(new InputStreamReader(response.getEntity()

.getContent()));

StringBuffer sb = new StringBuffer("");

String line = "";

String NL = System.getProperty("line.separator");

while ((line = in.readLine()) != null) {

sb.append(line + NL);

}

in.close();

String json = sb.toString();

System.out.println(json);

Gson gson = new Gson();

Type collectionType = new TypeToken() {

}.getType();

MyClass myclass= gson.fromJson(json, collectionType);

GameEnvironment.get().getHandler().post(new Runnable() {

@Override

public void run() {

addElementsToTableLayout();

}

});

} finally {

if (in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

现在,如果您希望使用异步任务来完成此操作,则只需将其放在

onBackground方法

例如

private class DownloadFile extends

AsyncTask {

MyBoolean downloaded;

ProgressDialog mProgressDialog;

boolean canceled=false;

public DownloadFile(MyBoolean downloaded) {

this.downloaded=downloaded;

}

@Override

protected MyBoolean doInBackground(PluginDetails... pluginDetail) {

try {

URL url = new URL("http://cardsplatform.appspot.com"

);

URLConnection connection = url.openConnection();

connection.connect();

// this will be useful so that you can show a typical 0-100%

// progress bar

long fileLength = getSize();

// download the file

InputStream input = new BufferedInputStream(

connection.getInputStream());

FileOutputStream output = StaticFunctions

.getPluginOutputStream(pluginDetail[0].getFilename());

byte data[] = new byte[4096];

long total = 0;

int count;

while ((count = input.read(data)) != -1 && !canceled) {

total += count;

System.out.println((int) (total * 100 / fileLength));

// publishing the progress....

publishProgress((int) (total * 100 / fileLength));

output.write(data, 0, count);

}

output.flush();

output.close();

input.close();

if(!canceled)

downloaded.setFlag(true);

else{//case its was canceled

}

} catch (Exception e) {

cannotMakeConnection();

e.printStackTrace();

}

return null;

}

enter code here

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值