Параметры не отправляются с помощью OkHTTP для Android Studio

Итак, я использую Android Studio 1.2.1.1, oKhttp 2.5.0, okio 1.6.0, я правильно установил зависимости (я считаю), и я искал везде, поэтому я должен делать что-то очень простое неправильно, как никто другой кажется, есть проблема с этим.

У меня есть класс Java под названием OkHttpPostHandler со следующим кодом

import android.os.AsyncTask;

import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;

public class OkHttpPostHandler extends AsyncTask<String, Void, String> {

OkHttpClient client = new OkHttpClient();
String varUser, varPass;

public OkHttpPostHandler(String varUser, String varPass) {
    this.varUser = varUser;
    this.varPass = varPass;
}

@Override
protected String doInBackground(String... params){
    RequestBody formBody = new FormEncodingBuilder()
            .add("u", varUser)
            .add("p", varPass)
            .build();
    Request request = new Request.Builder()
            .url(params[0]).post(formBody)
            .build();
    try {
        android.util.Log.w("Test", formBody.toString());
                Response response = client.newCall(request).execute();
        if (!response.isSuccessful())
            throw new IOException("unexpected code " + response.toString());
        return response.body().string();
    } catch (Exception e) {
    }
    return null;
}

}

И у меня есть кнопка, которая читает два представления EditText для получения имени пользователя и пароля, которая затем запускает вызов http:

@Override
public void onClick(View bnLoginSubmit) {
    EditText loginUsernameFont = (EditText) findViewById(R.id.evUsername);
    EditText loginPasswordFont = (EditText) findViewById(R.id.evPassword);

    String varUsername = loginUsernameFont.getEditableText().toString();
    String varPassword = loginPasswordFont.getEditableText().toString();
    String varPasswordHash = BCrypt.hashpw(varPassword, BCrypt.gensalt());

    if (varUsername.isEmpty() || varPassword.isEmpty() || varUsername.contentEquals("") || varPassword.contentEquals("")) {
        Toast.makeText(getApplicationContext(), "Username and/or Password Cannot be Empty",
                Toast.LENGTH_LONG).show();
    } else {
        // sendPostRequest(varUsername, varPasswordHash);
        boolean varPassCheck = BCrypt.checkpw("Password", varPasswordHash);
        OkHttpPostHandler handler = new OkHttpPostHandler("Username_String","Password_String");
        String result = null;
        try {
            result = handler.execute("http://www.example.com").get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        Toast.makeText(getApplicationContext(), "PHP Response = " + result,
                Toast.LENGTH_LONG).show();
    }
}

Я предположил, что проблема связана с моим хэшированием bcrypt (поэтому я использую строки, введенные вручную, для тестирования), но, похоже, это прекрасно работает. Просто мои параметры не передаются. Если я введу параметры вручную в URL, он вернется правильно, но я предпочел бы иметь возможность использовать этот класс, чтобы он мог быть динамическим для будущих вызовов.

Кто-нибудь может увидеть, что я делаю не так? Это должно быть что-то простое. Любая помощь будет оценена, так как я изо всех сил пытаюсь определить проблему.

1 ответ

Решение

Проблема в бэкэнде. Он ожидает GET-запроса.

<?php 
    $username = $_GET['u']; 
    $password = $_GET['p']; 

    if ($username=='Username_String' && $password=='Password_String') { 
        echo 'true'; 
    } else { 
        echo 'username = ' . $username . ' Password = ' . $password; 
    } 
?> 

Вы можете использовать $_REQUEST для поддержки запросов GET и POST:

<?php 
    $username = $_REQUEST['u']; // or $_POST 
    $password = $_REQUEST['p']; 

    if ($username=='Username_String' && $password=='Password_String') { 
        echo 'true'; 
    } else { 
        echo 'username = ' . $username . ' Password = ' . $password; 
    } 
?>
Другие вопросы по тегам