2016-07-27 47 views
0

我已經在這裏回答了我自己的問題。查看我使用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,所以我沒有任何線索。我真的很關心互聯網尋找答案,因此張貼在這裏是最後的手段。

謝謝!

回答

0

事實證明,必須使用php://輸入來獲取發佈的數據。

相關問題