AsyncTask在运行后台时给出错误



我正在尝试使用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);
        }
    }

相关内容

  • 没有找到相关文章

最新更新