ohttp после запроса отправки нулевых значений на сервер

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

вот мой 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());
}

}
}

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

2

Решение

Нашел ответ от Вот. Нужно использовать FormBody.Builder, По какой-то причине это не работает так, как на сайте ohttp. (как я пытался в моем вопросе).

вот мой отредактированный класс 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());
}

}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]