Volley库NetworkDispatcher.run错误

3
在我的程序中,出现了 NetworkDispatcher.run 错误,我正在使用 Volley 库。我的程序部分是 。我已经尝试过各种方法,但都没有成功,请帮助我完成我的程序。我在网上搜索了很多内容,但都没有帮助我。我的程序是 Android 上的登录验证程序。
if(!(usr.getText().toString().length()<11)&&!(pwd.getText().toString().length()<3)) {
                    susr = usr.getText().toString();
                    spwd = pwd.getText().toString();
                    String whois = susr.substring(0, Math.min(susr.length(), 2));
                    if (whois.equals("AG") || whois.equals("RT")) {
                        if (whois.equals("AG")) {

                            id = susr.substring(susr.length() - 9);
                            Toast.makeText(getApplicationContext(), id, Toast.LENGTH_LONG).show();
                            StringRequest stringRequest = new StringRequest(Request.Method.POST, agenturl,
                                    new Response.Listener<String>() {
                                        @Override
                                        public void onResponse(String response) {
                                            //Toast.makeText(getApplicationContext(),response,Toast.LENGTH_LONG).show();
                                            if(response.equals("0")){
                                                Toast.makeText(getApplicationContext(),"Login successful",Toast.LENGTH_LONG).show();
                                                Intent intent=new Intent(getBaseContext(),Deals.class);
                                                startActivity(intent);
                                            }else{
                                                Toast.makeText(getApplicationContext(),"username or password is incorrect",Toast.LENGTH_LONG).show();
                                            }
                                        }
                                    },
                                    new Response.ErrorListener() {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {
                                            //Toast.makeText(MainActivity.this,error.toString(), Toast.LENGTH_LONG).show();
                                            if(error instanceof NoConnectionError) {
                                                Toast.makeText(getApplicationContext(),"No internet Access, Check your internet connection.", Toast.LENGTH_LONG).show();
                                            }
                                        }
                                    }){
                                @Override
                                protected Map<String,String> getParams(){
                                    Map<String,String> params = new HashMap<String, String>();
                                    params.put("id",id);
                                    params.put("pwd",spwd);
                                    return params;
                                }

                            };
                            requestQueue.add(stringRequest);
                        }
                        else if(whois.equals("RT")){

                            StringRequest stringRequest2 = new StringRequest(Request.Method.POST, retailerurl,
                                    new Response.Listener<String>() {
                                        @Override
                                        public void onResponse(String response) {
                                            //Toast.makeText(getApplicationContext(),"hf",Toast.LENGTH_LONG).show();
                                            //Toast.makeText(getApplicationContext(),response,Toast.LENGTH_LONG).show();
                                            if(response.equals("0")){
                                                Toast.makeText(getApplicationContext(),"Login successful",Toast.LENGTH_LONG).show();
                                                Intent intent=new Intent(getBaseContext(),Deals.class);
                                                startActivity(intent);
                                            }else{
                                                Toast.makeText(getApplicationContext(),"username or password is incorrect",Toast.LENGTH_LONG).show();
                                            }
                                        }
                                    },
                                    new Response.ErrorListener() {
                                        @Override
                                        public void onErrorResponse(VolleyError error) {
                                            //Toast.makeText(MainActivity.this,error.toString(), Toast.LENGTH_LONG).show();
                                            if(error instanceof NoConnectionError) {
                                                Toast.makeText(getApplicationContext(),"No internet Access, Check your internet connection.", Toast.LENGTH_LONG).show();
                                            }
                                        }
                                    }){
                                @Override
                                protected Map<String,String> getParams(){
                                    Map<String,String> params = new HashMap<String, String>();
                                    params.put("id",id);
                                    params.put("pwd",spwd);
                                    return params;
                                }

                            };
                            requestQueue2.add(stringRequest2);
                        }
                    } else{
                        Toast.makeText(getApplicationContext(), "The user id or password is incorrect", Toast.LENGTH_LONG).show();
                        usr.setText("");
                    }
                }else {
                    Toast.makeText(getApplicationContext(), "The user id or password is incorrect", Toast.LENGTH_LONG).show();
                    usr.setText("");
                }

错误日志的猫咪在这里。

E/Volley: [197] 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:484)
                                                               at com.android.volley.Request.getBody(Request.java:470)
                                                               at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:253)
                                                               at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:227)
                                                               at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
                                                               at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
                                                               at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)

这个问题解决了吗?如果是,能帮我解决一下吗? - Tauseef
@Tauseef 是的,我正在将空值传递给 getParams() 方法。即 id 为空。 - Kiran Benny Joseph
3个回答

9
错误信息显示你遇到了空指针异常。 这意味着你在代码运行时使用的变量为null。

3

这个错误通常在向服务器发送数据时发生。

尝试在此代码中放置硬编码值,以确保没有任何服务器错误。

           public Map<String, String> getParams()
              {
                Map<String, String> params = new HashMap<String, String>();
                params.put("rollno","1234");
                params.put("password","abcd");
                return params;
                  }
                };

如果它能正常工作,那么您应该进行调试以确保该参数获得了值。
             params.put("id",id);
              params.put("pwd",spwd);

2

我明白了。在 else if(whois.equals("RT")){ 之后,我忘记放置 id = susr.substring(susr.length() - 9);

主要是由于 volley 库的 getParams() 方法传递了 null 值导致了这个 NetworkDispatcher.run 错误。因此,我们必须注意向 getParams() 方法传递值。


在 post 方法中传递了空值导致错误。 - Kiran Benny Joseph

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