2016-12-19 8 views
2

Я разрабатываю простое приложение для Android, которое делает простой запрос на отправку на сервер. Но он отправляет нулевые значения для обоих ключей, которые требуются в качестве тела запроса с сервера. Я проверяю его с конца моего приложения, но он не отправляет нулевые значения.okhttp post request отправка нулевых значений на сервер

вот мой код php.

<?php 
include 'DBConnection.php'; 

$db = DBConnection::getInstance(); 
$db = DBConnection::getInstance(); 
$mysqli = $db->getConnection(); 

$username = $_POST ['username']; 
$password = $_POST ['password']; 

$result_array = array (
    "username " => $username, 
    "password " => $password 
); 

echo (json_encode($result_array)); 
?> 

Вот код в приложении для Android.

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

     loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       new LoginPostRequest().execute(RestConnection.LOGIN_POST); 
      } 
     }); 
    } 

private class LoginPostRequest extends AsyncTask<String, Object, String> { 

     private RequestBody body; 

     @Override 
     protected void onPreExecute() { 
      String userNameData = userName.getText().toString().replace(" ",""); 
      String PasswordData = password.getText().toString().replace(" ",""); 
      JSONObject requestBody = new JSONObject(); 

      try { 
       requestBody.put("username", userNameData); 
       requestBody.put("password", PasswordData); 
      } catch (JSONException e) { 
       Log.d(TAG,"Login onPreExecute"+e.getLocalizedMessage()); 
      } 

      String string = requestBody.toString(); 
      body = RequestBody.create(JSON, string); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      String urlEndPoint = params[0]; 

      Request request = new Request.Builder() 
        .url(RestConnection.API_BASE+urlEndPoint) 
        .post(body) 
        .build(); 

      try { 
       Response response = client.newCall(request).execute(); 
       return response.body().string(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return "String"; 

     } 

     @Override 
     protected void onPostExecute(String response) { 
      JSONObject responseBody; 
      try { 
       responseBody = new JSONObject(response); 
       String message = responseBody.getString("message"); 

       if(!message.equals("login failed")){ 
        Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); 
        Intent i = new Intent(MainActivity.this,MainMenuActivity.class); 
        startActivity(i); 
        finish(); 
       }else{ 
        Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       Log.d(TAG,"Login onPostExecute :"+e.getLocalizedMessage()); 
      } 

     } 
    } 

Я использую версию ohttp v3.5.0. Что я делаю не так?

+1

рекомендовал бы использовать 'Retrofit' /' gson' при взаимодействии с REST API. –

+0

см. Этот http://stackoverflow.com/questions/32856401/using-okhttp-library-for-posting-to-a-php-script-that-saves-to-mysql, который имеет полный пример. – rafsanahmad007

+0

@ rafsanahmad007 Это старая версия на okhttp. не тот ответ, который я ищу. Укажите, какие ошибки в моем коде отсутствуют. –

ответ

0

Найдено ответов от here. Необходимо использовать FormBody.Builder. По какой-то причине это не работает так, как говорится на сайте okhttp. (как я пытался в моем вопросе).

вот мой отредактированный класс AsyncTask.

private class LoginPostRequest extends AsyncTask<String, Object, String> { 

     private RequestBody body; 
     private HashMap<String,String> postData; 

     @Override 
     protected void onPreExecute() { 
      String userNameData = userName.getText().toString().replace(" ",""); 
      String PasswordData = password.getText().toString().replace(" ",""); 

      postData = new HashMap<>(); 
      postData.put("username",userNameData); 
      postData.put("password",PasswordData); 

      FormBody.Builder builder = new FormBody.Builder(); 

      for (Map.Entry<String, String> entry : postData.entrySet()) { 
       builder.add(entry.getKey(), entry.getValue()); 
      } 

      body = builder.build(); 
     } 

     @Override 
     protected String doInBackground(String... params) { 
      String urlEndPoint = params[0]; 

      Request request = new Request.Builder() 
        .url(RestConnection.API_BASE+urlEndPoint) 
        .post(body) 
        .build(); 
      try { 
       Response response = client.newCall(request).execute(); 
       return response.body().string(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String response) { 

      JSONObject responseBody; 
      try { 
       responseBody = new JSONObject(response); 
       String message = responseBody.getString("message"); 

       if(!message.equals("login failed")){ 
        Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); 
        Intent i = new Intent(MainActivity.this,MainMenuActivity.class); 
        startActivity(i); 
        finish(); 
       }else{ 
        Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show(); 
       } 
      } catch (JSONException e) { 
       Log.d(TAG,"Login onPostExecute :"+e.getLocalizedMessage()); 
      } 

     } 
    } 
Смежные вопросы