凌空抽射抛出异常,没有消息



我正在开发一个安卓应用程序,你应该注册为司机或乘客。我正在使用凌空库将用户的信息存储在数据库中,现在当我注册为骑手时,一切正常。但是,当我尝试注册为驱动程序时,它会抛出一个没有消息的异常,所以我什至不知道交易是什么。我在扩展 StringRequest 的类中编写了构造函数。使用哈希图,在两种情况下都采用具有相同键名的值:司机和骑手。我正在使用在两种情况之间切换的开关。启用后,您将注册为驱动程序。否则,您将注册为乘客。

下面是编写请求构造函数的 PostRequest 类:

//The rider register request
    public class PostRequest extends StringRequest {
        private static final String register_url="http://pickmeapp.netai.net/register.php";
        private static final String logIn_url="http://pickmeapp.netai.net/db_functions.php";
        private Map<String,String> params;
                public PostRequest(String Name,String username,String password, String age,String gcm_id,String userType,Response.Listener<String> listener)
                {
                    super(Method.POST,register_url,listener,null);
                    params= new HashMap<>();
                    params.put("regId",gcm_id);
                    params.put("registerName",Name);
                    params.put("registerPassword",password);
                    params.put("registerUserName",username);
                    params.put("registerAge",age);
                    params.put("registerUserType",userType);
                }
        public PostRequest(String username,String password,Response.Listener<String> listener)
        {
            super(Method.POST,logIn_url,listener,null);
            params=new HashMap<>();
            params.put("UserName",username);
            params.put("Password",password);
        }
//The driver register request constructor
        public PostRequest(String Name,String username,String password, String age,String gcm_id,String carNumber,String carModel,String userType,Response.Listener<String> listener)
        {
            super(Method.POST,register_url,listener,null);
            params= new HashMap<>();
            params.put("regId",gcm_id);
            params.put("registerName", Name);
            params.put("registerPassword",password);
            params.put("registerUserName",username);
            params.put("registerAge",age);
            params.put("registerCarNumber",carNumber);
            params.put("registerCarModel",carModel);
            params.put("registerUserType",userType);
        }
        public Map<String,String> getParams()
        {
            return params;
        }
    }

这是我将数据发送到服务器的代码:

    private void WebServerRegistrationTask()  {
            String name,username,age,password;
            PostRequest registerRequest;
            name=nameEditText.getText().toString();
            username=userNameEditText.getText().toString();
            age=ageEditText.getText().toString();
            password=passwordEditText.getText().toString();
               final Response.Listener<String> gcm_database_listener= new Response.Listener<String>()
                {
                    public void onResponse(String response) {
                        Intent intent = new Intent(RegisterActivity.this,LogIn.class);
                        startActivity(intent);
                    }
                };
            try {
                if(aSwitch.isChecked())
                {
                    carNumberString= carNumberEditText.getText().toString();
                    carModelString=carModelEditText.getText().toString();
                    userType="driver";
                    Log.i("Car Number",carNumberString);
                    Log.i("Car Model", carModelString);
                    registerRequest=new PostRequest(name,username,password,age,gcmRegId,carNumberString,carModelString,userType,gcm_database_listener);
                }
                else {
                    userType = "rider";
                    registerRequest = new PostRequest(name, username, password, age, gcmRegId, userType, gcm_database_listener);
                }
                RequestQueue requestQueue = Volley.newRequestQueue(RegisterActivity.this);
                requestQueue.add(registerRequest);
            } catch(Exception ex)
            {
                Toast.makeText(getApplicationContext(),ex.getMessage(),Toast.LENGTH_LONG).show();
            }
            }

应该提到的是,当我尝试使用 logcat 查找异常时,它给出了一个 NullPointerException:

log.e("Error is",ex.getMessage());

那么第一个问题是你没有在凌空抽射上设置错误侦听器! 在帖子请求中的超级调用中

super(Method.POST,register_url,listener,null);

该 null 应该是您的错误侦听器,因此您知道为什么出了问题。为您的 PostRequest 类尝试此操作

public class PostRequest extends StringRequest {
        private static final String register_url="http://pickmeapp.netai.net/register.php";
        private static final String logIn_url="http://pickmeapp.netai.net/db_functions.php";
        private Map<String,String> params;
                public PostRequest(String Name,String username,String password, String age,String gcm_id,String userType,Response.Listener<String> listener, Response.ErrorListener errorListener)
                {
                    super(Method.POST,register_url,listener,errorListener);
                    params= new HashMap<>();
                    params.put("regId",gcm_id);
                    params.put("registerName",Name);
                    params.put("registerPassword",password);
                    params.put("registerUserName",username);
                    params.put("registerAge",age);
                    params.put("registerUserType",userType);
                }
        public PostRequest(String username,String password,Response.Listener<String> listener, Response.ErrorListener errorListener)
        {
            super(Method.POST,logIn_url,listener,errorListener);
            params=new HashMap<>();
            params.put("UserName",username);
            params.put("Password",password);
        }
//The driver register request constructor
        public PostRequest(String Name,String username,String password, String age,String gcm_id,String carNumber,String carModel,String userType,Response.Listener<String> listener, Response.ErrorListener errorListener)
        {
            super(Method.POST,register_url,listener,errorListener);
            params= new HashMap<>();
            params.put("regId",gcm_id);
            params.put("registerName", Name);
            params.put("registerPassword",password);
            params.put("registerUserName",username);
            params.put("registerAge",age);
            params.put("registerCarNumber",carNumber);
            params.put("registerCarModel",carModel);
            params.put("registerUserType",userType);
        }
        public Map<String,String> getParams()
        {
            return params;
        }
    }

然后,当您创建请求时,还会创建一个错误 lsitener 并将其传入:

final Response.Listener<String> gcm_database_listener= new Response.Listener<String>()
                    {
                        public void onResponse(String response) {
                            Intent intent = new Intent(RegisterActivity.this,LogIn.class);
                            startActivity(intent);
                        }
                    };
Response.ErrorListener errorListener = new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError e) {
                    String error = e.networkResponse.statusCode + ": " + new String(e.networkResponse.data);
                    Log.e("Volley Error: ", error);
            }
        };
                try {
                    if(aSwitch.isChecked())
                    {
                        carNumberString= carNumberEditText.getText().toString();
                        carModelString=carModelEditText.getText().toString();
                        userType="driver";
                        Log.i("Car Number",carNumberString);
                        Log.i("Car Model", carModelString);
                        registerRequest=new PostRequest(name,username,password,age,gcmRegId,carNumberString,carModelString,userType,gcm_database_listener,errorListener);
                    }

最新更新