我正在使用一个访问互联网获取某些数据的应用程序,然后发送我检查互联网连接的任何请求,如果可用,应用程序继续并发送请求,如果没有,它会保留。如果发送请求并且连接丢失,则应用程序会继续等待数据,如果需要很长时间,它会继续并尝试访问不可用的数据,在这种情况下,它会尝试访问“JSON”的值“object”json.toString()“,我得到一个NullPointerException。我已经设置了一个try catch块,但是我不知道它是否工作正常,我希望它能够在有这样的情况下运行“有网络问题”的消息,如果有人知道我怎么能这样做请分享,下面是我的代码:
@Override
protected String doInBackground(String... params) {
int success;
try {
// Building Parameters
List<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("username", username));
param.add(new BasicNameValuePair("post_id", postID));
param.add(new BasicNameValuePair("title", title));
Log.d("request!", "starting");
//Posting user data to script
JSONObject json = jsonParser.makeHttpRequest(
ADD_TO_CART, "POST", param);
// full json response
Log.d("Post Comment attempt", json.toString());
// json success element
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Comment Added!", json.toString());
//finish();
return json.getString(TAG_MESSAGE);
} else {
Log.d("Comment Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:3)
为什么要赶上NPE?只有在解除引用json
之前检查它是否为空
JSONObject json = jsonParser.makeHttpRequest(ADD_TO_CART, "POST", param);
if (json != null) {
//do current code
} else {
showToaster("There was an error in the connection");
}
一般情况下,捕获未经检查的异常是一种毫无意义的IMO,因为您无法从它们中恢复,但特别是NPE,因为您可以轻松验证异常是否会发生
答案 1 :(得分:1)
以下代码会包含JSONException
或NullPointerExeption
。
try{
//Your Code
} catch (JSONException e) {
e.printStackTrace();
} catch (NullPointerException npe){
//Handle Exception
}