2016-07-27 83 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://输入来获取发布的数据。

相关问题