【发布时间】: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不是null。callback是null。 -
"callback" 似乎为空,您没有显示如何初始化它。
-
@IgorB:添加了我认为不重要的课程的另一部分。请查看我更新的问题代码
-
尝试调试
callback,一切正常。我认为callback有问题,因为异常肯定说callback is null
标签: android