所以,我正在使用Android Studio 1.2.1.1,oKhttp 2.5.0,okio 1.6.0,我已经正确设置了依赖项(我相信),而且我已经到处寻找所以我必须做一些非常简单的错误操作没有其他人似乎对此有任何疑问。
我有一个名为OkHttpPostHandler的Java类,代码如下
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中,它会正确返回,但我希望能够在此类上构建,以便将来可以动态调用。
谁能看到我做错了什么?它必须是简单的东西。任何帮助都会受到赞赏,因为我正在努力找出问题。
答案 0 :(得分:0)
问题在于后端。它期待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;
}
?>