所以,我使用的是Android Studio 1.2.1.1,oKhttp 2.5.0,okio 1.6.0,我已經正確設置了依賴關係(我相信),並且我已經到處尋找我必須做一些非常簡單的事情,因爲沒有其他人似乎對此有任何疑問。參數不是使用OkHTTP for Android Studio發送的
我有一個名爲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;
}
}
一個Java類和我有一個按鈕,它讀取兩個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中,它會正確返回,但我更願意能夠在此類上構建,以便將來可以動態調用。
任何人都可以看到我做錯了什麼?它必須是簡單的。任何幫助將不勝感激,因爲我努力找出問題。
是你的後臺等待POST請求?你可以公開你的後端代碼嗎? –
這是一個使用字符串的清理版本 <?php $ username = $ _GET ['u']; $ password = $ _GET ['p']; if($ username =='Username_String'&& $ password =='Password_String'){ echo'true'; } else { echo'username ='。 $用戶名。 '密碼='。 $密碼; } ?> – AranDG
所以......這是你的問題。在你的後端,你期待一個GET請求:'$ _GET'嘗試改變爲$ _POST ...(我認爲它是PHP) –