2016-06-03 9 views
0

Ich arbeite an einer Android App, wo Sie sich als Fahrer oder Fahrer registrieren sollen. Ich benutze die Volley-Bibliothek, um Benutzerinformationen in einer Datenbank zu speichern, jetzt, wenn ich mich als Fahrer registriere, funktioniert alles gut. Wenn ich versuche, mich als Treiber zu registrieren, wird jedoch eine Ausnahme ohne Nachricht ausgegeben, sodass ich nicht einmal weiß, was das Geschäft ist. Ich habe Konstruktoren in der Klasse geschrieben, die ein StringRequest erweitert. Mit einer Hashmap, die in beiden Fällen Werte mit den gleichen Schlüsselnamen verwendet: Fahrer und Fahrer. Ich benutze einen Schalter, der zwischen den beiden Fällen unterscheidet. Wenn Sie eingeschaltet sind, registrieren Sie sich als Treiber. Ansonsten registrierst du dich als Fahrer.Volley wirft eine Ausnahme ohne Nachricht

Hier ist die PostRequest Klasse, wo die Anfrage Konstrukteurs geschrieben werden:

//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; 
     } 
    } 

Und hier ist der Code, wo ich die Daten an den Server senden:

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(); 
      } 
      } 

Es sollte erwähnt werden, dass, wenn ich versuchte, Um die Ausnahme mithilfe des Logcat zu finden, gab es eine NullPointerException:

+0

Überprüfen Sie Ihre logcat für die genauen Fehler. –

+0

@ShadabAnsari Die Logcat zeigt die gleichen genauen Nachrichten in beiden Fällen, lassen Sie mich die Frage bearbeiten, so dass ich die Logcat –

+0

Bitte lesen Sie [diese (wie Sie fragen)] (http://stackoverflow.com/help/how (fragen) und [dies (mcve)] (http://stackoverflow.com/help/mcve), bevor Sie Fragen stellen, da diese Ihnen helfen werden, mehr und bessere Antworten von der Community zu erhalten. Versuchen Sie immer, Fehler, erwartete Eingabe/Ausgabe sowie Protokolle, die relevant sein können, zu demonstrieren. – Bonatti

Antwort

1

Nun, das erste Problem ist, dass Sie keinen Fehler-Listener auf Volley setzen! in Ihrem Super-Anruf in PostRequest

, dass Null soll Ihr Fehler Listener sein, so dass Sie wissen, warum etwas schief gelaufen ist. Versuchen Sie dies für Ihre PostRequest Klasse

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; 
     } 
    } 

dann, wenn Sie eine Anfrage erstellen auch einen Fehler lsitener erstellen und geben es in:

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); 
        } 
+0

Lass mich das versuchen ... –