我正在尝试使用AsyncTask做一些任务。但是当我完成的时候。它没有显示任何语法错误。但是在运行时显示如下图
所示的错误我试着调试它,但可以得到问题是什么。请帮助
JsonParsingActivity.java
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.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
public class AndroidJSONParsingActivity extends ListActivity {
final String TAG_PRODUCTS = "products";
final String TAG_CID = "cid";
final String TAG_NAME = "name";
JSONArray products = null;
ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Message().execute(this);
// The service section
startService(new Intent(this, UpdateService.class));
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_item,
new String[] { TAG_NAME,}, new int[] {
R.id.name});
setListAdapter(adapter);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
new Message().execute(this);
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_item,
new String[] {TAG_NAME,}, new int[] {
R.id.name});
setListAdapter(adapter);
}
//Belongs to update service
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
// stopService(new Intent(this, UpdateService.class));
}
class Message extends AsyncTask<Context, Integer, Long>{
@Override
protected Long doInBackground(Context... params) {
// TODO Auto-generated method stub
String url = "http://ensignweb.com/sandbox/app/comment11.php";
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Contacts
for(int i = products.length()-1; i >=0; i--){
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String cid = c.getString(TAG_CID);
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_CID, cid);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
contactList.add(map);
Log.d("value", contactList.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
}
显示为InnerSetException和setException
在Message类的postExecute()(重写方法)方法中使用
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_item,
new String[] { TAG_NAME,}, new int[] {
R.id.name});
setListAdapter(adapter);
像这样修改AsyncTask:
class Message extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// Your woriking
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
ListAdapter adapter = new SimpleAdapter(this, contactList,
R.layout.list_item,
new String[] { TAG_NAME,}, new int[] {
R.id.name});
setListAdapter(adapter);
}
InnerSetException and setException
raise to提供让您将结果设置为异常。
您必须重写done()
方法并尝试获得结果。
@Override
protected void done() {
try {
if (!isCancelled()) get();
} catch (ExecutionException e) {
//If Exception occurred, handle it.
} catch (InterruptedException e) {
throw new AssertionError(e);
}
}