在Java中捕获并抛出NullPointerException

时间:2015-05-15 20:59:31

标签: java android

我正在使用一个访问互联网获取某些数据的应用程序,然后发送我检查互联网连接的任何请求,如果可用,应用程序继续并发送请求,如果没有,它会保留。如果发送请求并且连接丢失,则应用程序会继续等待数据,如果需要很长时间,它会继续并尝试访问不可用的数据,在这种情况下,它会尝试访问“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;

    }

2 个答案:

答案 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)

以下代码会包含JSONExceptionNullPointerExeption

try{
     //Your Code

} catch (JSONException e) {
        e.printStackTrace();
} catch (NullPointerException npe){
      //Handle Exception
}