从asynctask接收json数据到activity

时间:2015-02-25 12:53:52

标签: android json android-asynctask

在我的活动onCreatemethode中,我将如下所示排除asynctask,

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        new PizzaCustomizeAsyncTask(ActivityPizzaCustomize.this, null).execute();

PizzaCustomizeAsyncTask

@Override
    protected void onPostExecute(JSONArray result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        listener.onTaskCompleted(responseJson);
    }

在这个asynctask我得到responseJson的响应。当我试图将它发送回onTaskComplete方法时,它会崩溃,并且消息应用程序已经停止。

然后我有相同的活动,我正在使用它来获取asynctask的响应。

@Override
public void onTaskCompleted(JSONArray responseJson) {

    try {
        List<String> crust = new ArrayList<String>();


        for (int i = 0; i < responseJson.length(); ++i) {
            JSONObject object = responseJson.getJSONObject(i);

            if ((object.getString("MainCategoryID")).equals("1")
                    && (object.getString("SubCategoryID")).equals("1")) {
                Log.i("Crust ", object.getString("Crust"));
                crust.add(object.getString("Crust"));
            }

        }

    } catch (JSONException e) {
        e.printStackTrace();
    }
}

OnTaskCompleted接口

public interface OnTaskCompleted {
    void onTaskCompleted(JSONArray responseJson);
}
当我将jsonresponse发送回活动时出现

问题,所以这有什么问题

new PizzaCustomizeAsyncTask(ActivityPizzaCustomize.this, null).execute();

任何帮助将不胜感激,以解决此问题。

当我删除null时,它会给出以下错误和建议,如下图所示。 (我在PizzaCustomizeAsyncTask中得到了OnTaskCompleted监听器的suggesstion bz)

public PizzaCustomizeAsyncTask(Context context, OnTaskCompleted listener) {

        // API = apiURL;
        this.contxt = context;
        this.listener = listener;
    }

enter image description here

3 个答案:

答案 0 :(得分:1)

ROOT CAUSE 是你的asynctask中的接口对象为null;

OnTaskCompleted listener;

将活动oncreate方法中的asynctask调用更改为:

new PizzaCustomizeAsyncTask(ActivityPizzaCustomize.this, this).execute();

你的顾问必须是这样的:

public PizzaCustomizeAsyncTask(Context context, OnTaskCompleted listener)
{
    this.context=context;
    this.listener=listener;
}

答案 1 :(得分:0)

您没有在构造函数中传递有效的侦听器参数。

而不是

new PizzaCustomizeAsyncTask(ActivityPizzaCustomize.this, null).execute();

你应该通过

new PizzaCustomizeAsyncTask(ActivityPizzaCustomize.this, listener).execute();

假设您已经创建了一个合适的侦听器。

答案 2 :(得分:0)

您可以拨打PizzaCustomizeAsyncTask,如下所示:

PizzaCustomizeAsyncTask asyncTask =new PizzaCustomizeAsyncTask(new OnTaskCompleted() {

            @Override
            public void onTaskCompleted(Object output) {
                 ....
            }
        });
        asyncTask.execute();


      }

在AsyncTask中:

OnTaskCompleted listener;

public PizzaCustomizeAsyncTask(OnTaskCompleted listener) {

        this.listener = listener;
    }