使用Volley发布数据时出现错误:“NetworkDispatcher.run:未处理的异常java.lang.NullPointerException:尝试调用虚拟方法”

3

错误 ""NetworkDispatcher.run: 未处理例外 java.lang.NullPointerException: 尝试调用虚拟方法 'int java.lang.String.length()'" " UI 包含两个密码编辑文本字段和一个按钮,我打算将用户输入的密码保存到服务器,但是每当我单击提交按钮时,StringRequest 的 onErrorResponce 函数显示上述错误。 以下是保存密码到服务器的代码。

  private void savePasswordToServer() {//pass1&pass are two edittext field objects
        if(pass1.getText().toString().equals(pass.getText().toString()))
        {
            String url = new URLConstants().BaseURL+"save_password.php";
            StringRequest request = new StringRequest(Request.Method.POST, url,new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try
                    {
                        JSONObject jsonObject = new JSONObject(response);
                        boolean e = jsonObject.getBoolean("error");
                        if(!e)
                        {
                            Toast.makeText(getApplicationContext(), "password change successful", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(getApplicationContext(),HomeScreen.class);
                            startActivity(intent);
                        }
                        else
                            Toast.makeText(getApplicationContext(),jsonObject.getString("error_details"),Toast.LENGTH_LONG).show();
                    }catch (JSONException e)
                    {
                        Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(),"error VOLLEY "+error.getMessage(),Toast.LENGTH_LONG).show();
                }
            })
            {
                @Override
            public Map<String, String> getParams()
                {
                    Map<String, String> params = new HashMap<String, String>();
                    params.put("rollno",rollno);
                    params.put("password",pass1.getText().toString());
                    return params;
                }
            };
            MySingleton.getInstance(this).addToRequestQueue(request);
        }
        else
        {
            pass1.setError("wrong password");
            return;
        }
}

以下是在AndroiMonitor中生成的错误:
03-12 11:35:55.020 2742-2803/? E/Volley: [155] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                     java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                         at libcore.net.UriCodec.encode(UriCodec.java:132)
                                         at java.net.URLEncoder.encode(URLEncoder.java:57)
                                         at com.android.volley.Request.encodeParameters(Request.java:413)
                                         at com.android.volley.Request.getBody(Request.java:399)
                                         at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:236)
                                         at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210)
                                         at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
                                         at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
                                         at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:105)

请帮助我


1个回答

0

对我来说,好像你的

   error.getMessage()

为空。

在您的错误响应中尝试使用以下代码

if(error!=null && error.getMessage() !=null){
    Toast.makeText(getApplicationContext(),"error VOLLEY "+error.getMessage(),Toast.LENGTH_LONG).show();
}
else{
    Toast.makeText(getApplicationContext(),"Something went wrong",Toast.LENGTH_LONG).show();

}

看看这个是否可行并让我知道。如果不行,我会更深入地研究问题。

另一个可能性是

  jsonObject.getString("error_details")

为空或为null。


1
嘿,谢谢你,但我仍然面临相同的错误“error volley +”。 - hemanth5636
我也是这么想的,下面是最新的日志。 - hemanth5636
03-12 12:39:21.136 2638-2677/? E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb40566e0 03-12 12:39:33.363 2638-2718/? E/Volley: [137] NetworkDispatcher.run: 未处理的异常 java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'int java.lang.String.length()' java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'int java.lang.String.length()' at libcore.net.UriCodec.encode(UriCodec.java:132) - hemanth5636

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接