【问题标题】:Attempt to invoke interface method 'void com.bustracker.AsyncTaskCallback.onAsyncTaskFinished(java.util.ArrayList)' on a null object reference尝试在空对象引用上调用接口方法“void com.bustracker.AsyncTaskCallback.onAsyncTaskFinished(java.util.ArrayList)”
【发布时间】:2015-05-31 20:31:26
【问题描述】:

我正在尝试将结果从 doInBackground 传递给 onPostExecute() 方法,但出现此错误:

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“void com.bustracker.AsyncTaskCallback.onAsyncTaskFinished(java.util.ArrayList)”

我无法理解我已经在onPostExecute中检查arrayList是否为空但是当路由The output of routes: [3,6,8]的输出时应用程序崩溃但是当arrayList为空时,应用程序不会崩溃?!

我该如何解决这个问题?

感谢您的帮助。

PostData 类:

public class PostData {
    String jSONString;
    private AsyncTaskCallback callback;


    public PostData(AsyncTaskCallback callback) {
        this.callback = callback;
    }

    public String getjSONString() {
        return jSONString;

    }

    public void setjSONString(String jSONString) {
        this.jSONString = jSONString;
    }

    public void post_data(String jSONString, Context context) {
        this.jSONString = jSONString;

        new MyAsyncTask(context).execute(jSONString);
        // new MyAsyncTask(context).cancel(true);

    }

    class MyAsyncTask extends AsyncTask<String, Integer, ArrayList<Integer>> {

            ArrayList<Integer> routes = new ArrayList<Integer>();

            @Override
            protected ArrayList<Integer> doInBackground(String... params) {
                // TODO Auto-generated method stub
                BufferedReader reader = null;

                try {

                    URL myUrl = new URL(
                            "https://bustracker.rhcloud.com/webapi/test");
                    HttpURLConnection conn = (HttpURLConnection) myUrl
                            .openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(10000);
                    conn.setReadTimeout(10000);
                    conn.connect();

                    StringBuilder sb = new StringBuilder();
                    reader = new BufferedReader(new InputStreamReader(
                            conn.getInputStream()));
                    String line;

                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");

                    }
                    System.out.println("StringBuilder: " +sb);

                    Gson gson = new Gson();
                    JSONStore data = gson.fromJson(sb.toString(), JSONStore.class);
                    routes = data.getRoutes();
                    System.out.println("The output of routes: " +routes);



                } catch (IOException e) {

                    e.printStackTrace();
                    return null;
                } finally {
                    if (reader != null) {
                        try {
                            reader.close();
                            return null;
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }

                return null;

            }

            protected void onPostExecute(ArrayList<Integer> result) {

                if (routes != null && !routes.isEmpty()) {
                    callback.onAsyncTaskFinished(routes);
                } else {
                    Log.e("123", "Avoiding null pointer in the AvailableRoutes class, the routes are null!!!");
                }
            }

        }
}

【问题讨论】:

  • 你在哪里初始化回调??
  • 同意。 ArrayList 不是 nullcallbacknull
  • "callback" 似乎为空,您没有显示如何初始化它。
  • @IgorB:添加了我认为不重要的课程的另一部分。请查看我更新的问题代码
  • 尝试调试callback ,一切正常。我认为callback 有问题,因为异常肯定说callback is null

标签: android


【解决方案1】:

java.lang.NullPointerException:尝试调用接口方法 '空白 com.bustracker.AsyncTaskCallback.onAsyncTaskFinished(java.util.ArrayList)' 在空对象引用上

看起来您的接口实例为空。初始化您的 AsyncTaskCallback 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2018-11-20
    • 2019-06-26
    相关资源
    最近更新 更多