我已經在這裏回答了我自己的問題。查看我使用php://輸入獲取發佈數據的第一個代碼塊。爲什麼我不能從OkHttp3收到POST變量? (Android Studio)
我想從我的應用程序發送POST請求到Web服務器,而我檢查後使用PHP乏:
if(isset($_POST['name'])){
echo json_encode(['status' => 1]);
}else if($posted_data = (string) @file_get_contents('php://input')) {
echo json_encode(['status' => 2]);
}else{
echo json_encode($_POST);
}
請求總是返回空JSON編碼陣列。
我正在使用最新的Android Studio,以及最新的OkHttp,com.squareup.okhttp3:okhttp:3.4.1。對我來說,這就像Android Studio中OkHttp的「Hello World」一樣。
在MainActivity.java:
public void postSomething(View view) {
String url = "https://example.com/json_api_test.php";
String json = "{\"name\":\"cholula\"}";
OkHttpPostHandler handler = new OkHttpPostHandler();
String result = "";
try {
result = handler.execute(url, json).get();
} catch (Exception e) {
e.printStackTrace();
}
displayPostResponse(result + "\n");
}
我OkHttpPostHandler.java:
public class OkHttpPostHandler extends AsyncTask<String, Void, String> {
OkHttpClient client = new OkHttpClient();
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
@Override
protected String doInBackground(String... params) {
RequestBody body = RequestBody.create(JSON, params[1]);
Request request = new Request.Builder()
.url(params[0])
.post(body)
.build();
try {
Response response = client.newCall(request).execute();
return response.body().string();
}
catch(Exception e){
return "HTTP Request Error";
}
}
}
當我調試,我可以看到PARAMS [1]值是預期的JSON字符串一樣,但這是我最後一次看到它。
我試過用多種方式形成json,所以我不確定是不是這個問題。我只是不明白爲什麼當發送請求到達服務器時我看不到發佈的變量。
如何在Web服務器上查看已發佈的變量?我究竟做錯了什麼?我只用了不到一週的時間就使用了Android Studio和Java,所以我沒有任何線索。我真的很關心互聯網尋找答案,因此張貼在這裏是最後的手段。
謝謝!