2017-01-29 4 views
1

Ich möchte Parameter per Volley zu PHP-Seite im Host senden. Aber ich bekomme den folgenden Fehler.send params von Volley android zu php mit Post-Methode

BasicNetwork.performRequest: Unexpected response code 400 

Das ist mein PHP-Code

<?php 

if ($_SERVER['REQUEST_METHOD']=='POST'){ 
    $user = $_POST['email']; 
    $pass = $_POST['password']; 

    $sql = "select * from users where email = '$user' AND password = '$pass'"; 

    require_once('config.php'); 
    $result = mysqli_query($con , $sql); 
    $check = mysqli_fetch_array($result); 

    if(isset($check)){ 
     echo "success"; 
    }else{ 
     echo "failure"; 
    } 
    mysqli_close($con); 
} 
?> 

Diese

Datei config.php ist
<?php 
$serverName = "localhost"; 
$userName = "root"; 
$password = ""; 
$dbName = "testDb" 

$con = mysqli_connect($serverName , $userName , $password , $dbName) or die("connect failed"); 
?> 

und das ist mein Android-Code

@Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     editTextEmail = (EditText) findViewById(R.id.editTextEmail); 
     editTextPassword = (EditText) findViewById(R.id.editTextPassword); 
     buttonLogin = (Button) findViewById(R.id.buttonLogin); 
     buttonLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       login(); 
      } 
     }); 
    } 


    @Override 
    protected void onResume() { 
     super.onResume(); 

     SharedPreferences sharedPreferences = getSharedPreferences(config.SHARED_PREF_NAME , Context.MODE_PRIVATE); 
     loggedIn = sharedPreferences.getBoolean(config.LOGGEDIN_SHARED_PREF , false); 
     Log.e("txt" , "text is : " + loggedIn); 
     if (loggedIn){ 
      Intent intent = new Intent(loginActivity.this , profileActivity.class); 
      startActivity(intent); 
     } 
    } 

    private void login(){ 

     final String email = editTextEmail.getText().toString().trim(); 
     final String password = editTextPassword.getText().toString().trim(); 

     StringRequest stringRequest = new StringRequest(Request.Method.POST, config.LOGIN_URL, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.i("StartActivity", response.toString()); 
       if(response.equalsIgnoreCase(config.LOGIN_SUCCESS)){ 
        //Creating a shared preference 
        SharedPreferences sharedPreferences = loginActivity.this.getSharedPreferences(config.SHARED_PREF_NAME, Context.MODE_PRIVATE); 

        //Creating editor to store values to shared preferences 
        SharedPreferences.Editor editor = sharedPreferences.edit(); 

        //Adding values to editor 
        editor.putBoolean(config.LOGGEDIN_SHARED_PREF, true); 
        editor.putString(config.EMAIL_SHARED_PREF, email); 
        //Saving values to editor 
        editor.commit(); 

        //Starting profile activity 
        Intent intent = new Intent(loginActivity.this, profileActivity.class); 
        startActivity(intent); 
       }else{ 
        //If the server response is not success 
        //Displaying an error message on toast 
        Toast.makeText(loginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show(); 
        Log.e("s" , "invalid sssssssssssssssssssssss"); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }){ 
      @Override 
      public Map<String, String> getParams() { 
       Map<String,String> params = new HashMap<>(); 
       params.put(config.KEY_EMAIL, email); 
       params.put(config.KEY_PASSWORD, password); 
       return params; 
      } 
     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 

Und wenn das onResponse läuft Der Befehl else wird ausgeführt. Die Übertragungsparameter mit post-Methode Werte sind falsch

thankyou

Antwort

0

Statt des überwiegenden getParams() versuchen getBodyContentType() und getBody() überschrieben.

Etwas wie folgt aus:

StringRequest stringRequest = new StringRequest(Request.Method.POST, config.LOGIN_URL, new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     Log.i("StartActivity", response.toString()); 
     if(response.equalsIgnoreCase(config.LOGIN_SUCCESS)){ 
      //Creating a shared preference 
      SharedPreferences sharedPreferences = loginActivity.this.getSharedPreferences(config.SHARED_PREF_NAME, Context.MODE_PRIVATE); 

      //Creating editor to store values to shared preferences 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 

      //Adding values to editor 
      editor.putBoolean(config.LOGGEDIN_SHARED_PREF, true); 
      editor.putString(config.EMAIL_SHARED_PREF, email); 
      //Saving values to editor 
      editor.commit(); 

      //Starting profile activity 
      Intent intent = new Intent(loginActivity.this, profileActivity.class); 
      startActivity(intent); 
     }else{ 
      //If the server response is not success 
      //Displaying an error message on toast 
      Toast.makeText(loginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show(); 
      Log.e("s" , "invalid sssssssssssssssssssssss"); 
     } 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 

    } 
}){ 
    @Override 
    public byte[] getBody() throws AuthFailureError { 
     final JSONObject body = new JSONObject(); 
     try { 
      body.put(config.KEY_EMAIL, email); 
      body.put(config.KEY_PASSWORD, password); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return body.toString().getBytes(); 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = new HashMap<>(); 
     headers.put("Content-Type","application/json"); 
     return headers; 
    } 
}; 

prüfen diese Frage: StringRequest with JSON body

+0

Die übertragenen Daten sind nicht die Art von json – Ali

+0

@Ali dann von welcher Art? –

+0

Die übertragenen Daten sind vom Typ String – Ali

1

BasicNetwork.performRequest: unerwartete Antwortcode 400

A 400 bedeutet, dass der Antrag fehlerhaft war. Mit anderen Worten, der Datenstrom, der vom Client an den Server gesendet wurde, folgte nicht den Regeln.

Fehler durch:

Sie haben vergessen, Semikolon nach dem $dbName zu setzen, die die DB wieder sterben verursacht und wieder ohne jede Exception via Login Link zeigt, Richtig:

$dbName = "testDb"; //<--here forgot to add semicolon 

Korrektur - Versuchen Sie folgenden Code:

@Override 
public Map<String, String> getParams() { 
    Map<String,String> params = new HashMap<>(); 
    params.put("user", email);  //here 
    params.put("pass", password); //here 
    return params; 
} 
}; 

Korrektur - Erfordern einmal vor mit Tabelle interagieren:

<?php 
$user = $_POST['email']; 
$pass = $_POST['password']; 

require_once('config.php'); //here 

$sql = "select * from users where email = '$user' AND password = '$pass'"; 
+0

danke.aber nicht funktionieren – Ali

+0

Okay, jetzt teste ich – Ali

+0

Fehler Hörer ausgeführt wurde !! – Ali