我正在开发一个在AsyncTask中做大工作的Android应用程序(可以是5分钟的AsyncTask活动)。
此任务需要互联网连接,所以在开始时我会检查设备是否在线。
但是如果用户从Wi-Fi连接更改为移动连接,或者在GraphRequest运行时离线,则会出现此错误:
引起:java.lang.NullPointerException:尝试调用虚方法' org.json.JSONObject org.json.JSONObject.getJSONObject(java.lang.String)'在空对象引用上
以下是崩溃代码的一部分:
// I Check if the device is online, if yes:
for(j=0; j<n_foto_pub;j++) {
GraphRequest request2 = GraphRequest.newGraphPathRequest(
AccessToken.getCurrentAccessToken(),
"MY_QUERY",
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
try {
JSONObject obj1 = response.getJSONObject();
JSONObject obj2 = obj1.getJSONObject("data1"); <--- CRASH HERE
JSONObject obj3 = obj2.getJSONObject("data2");
int ris = obj3.getInt("ris");
..........
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request2.executeAndWait();
}
我有一个捕获但反正崩溃。
如何避免应用程序崩溃,而是让用户重新启动之前的活动?
答案 0 :(得分:1)
见下面的代码,你会有更好的想法。
@Override
protected String doInBackground(String... params) {
{
try
{
//Your operation always inside try catch block to avoid crash.
for(j=0; j<n_foto_pub;j++)
{
if(checkInternet()) //check internet for each loop
{
}
else
{
callBackActivity();
}
}
}
catch(Exception e)
{
e.printStackTrace();
callBackActivity();
}
}