尝试正常工作但捕获错误

时间:2015-11-06 13:03:57

标签: android try-catch android-volley

嘿伙计们我在应用中工作,当我发送OTP以验证移动设备验证有错误但是OTP阻止时,我通过catch验证我的手机号码错误,Activity没有进入下一个Acivity,而且没有显示日志

 private void verifyOtp(final String otp){
    final StringRequest strReq = new StringRequest(Request.Method.POST,
            config.Config.URL_VERIFY_OTP, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.d(TAG, response.toString());
            try {
                JSONObject responseObj = new JSONObject(response);
                // Parsing json object response
                // response will be a json object
                boolean status =responseObj.getBoolean("status");
                if (status==true) {
                    // parsing the user profile information
                    JSONObject profileObj = responseObj.getJSONObject(response);
                    String mobile = profileObj.getString("mobile");
                    PrefManager pref = new PrefManager(getApplicationContext());
                    pref.createLogin(mobile);
                    Intent intent = new Intent(HttpService.this, MainActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                    Toast.makeText(getApplicationContext(), "HTTPIF"+status, Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "HTTPELSE"+status, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {  //------this is working and give toast----//
                System.out.print("jsonError :=>"+e);
                Toast.makeText(getApplicationContext(),
                        "Error is WWW: " + e.getMessage(),
                        Toast.LENGTH_LONG).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "HTTPError: " + error.getMessage());
            Toast.makeText(getApplicationContext(),
                    error.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }) {
        MyApplication userinfo = (MyApplication)getApplicationContext();
        final  String user = userinfo.getuser();      // Global Variable get Value uID
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<String, String>();
            params.put("akey","xxxxxxxxxx");
            params.put("mobileverify", otp);
            params.put("uid",user);
            Log.e(TAG, "Posting params: " + params.toString());
            return params;
        }
    };
    MyApplication.getInstance().addToRequestQueue(strReq);
}

2 个答案:

答案 0 :(得分:0)

String mobile = profileObj.getString("mobile");

你可能没有String但是没有。

答案 1 :(得分:0)

你得到JSONException。这可能是由于很多原因造成的,您可以在此处找到它们:http://developer.android.com/reference/org/json/JSONException.html

原因是,您使用的是StringRequest。这意味着,response是普通String而非JSON响应。只需打印reponse,然后亲眼看看它不是有效的JSON。您需要使用的是JSONRequest,或者按原样处理String响应,而不是json解析。

<强>更新 您的问题可能是由于以下两行中的任何一行,因为它们都可以抛出JSONExceptiongetJSONObject()getString()

JSONObject profileObj = responseObj.getJSONObject(response);
String mobile = profileObj.getString("mobile");

您说您的JSON回复是{"msg":"verified","status":true}。那么您如何尝试获取profileObjmobile的值?如果找不到该键的值,它将抛出JSONException。为避免这种情况,您需要检查密钥的值是否存在。在获取密钥之前,使用has(String key)确认密钥的映射。