2017-05-02 12 views
-5

我已经编写了一个来自android应用程序的POST请求代码,该应用程序将在服务器上运行一个php文件。如何从PHP获取POST请求的答复

String url = "http://****/****/Servlets.php"; 

    RequestQueue MyRequestQueue = Volley.newRequestQueue(this); 
    StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>(){ 
     @Override 
     public void onResponse(String response){ 
      //code when server responds 
     } 
    },new Response.ErrorListener(){ 
     @Override 
     public void onErrorResponse(VolleyError error){ 
      //Code if error is there 
      int test2 = 1; 
     } 
    }){ 
     protected Map<String, String> getParams() { 
      Map<String, String> MyData = new HashMap<String, String>(); 
      MyData.put("key",st); 
      return MyData; 
     } 
    }; 
    MyRequestQueue.add(MyStringRequest); 

Php文件的代码正在调用一个java文件并获取一些字符串值。如何将该字符串值返回给可以传递给onresponse()参数的android设备?还有等待回应,或者我们该如何处理?

请建议。

+1

为什么在这里双斜杠。 '**** **** // //'? – Jens

+0

有没有办法捕捉异常?如果你会建议我发布一个错误的方法 –

+0

有一个public void onErrorResponse(VolleyError error){'所以在那里打印volleyerror,看看响应是什么 – Denny

回答

1

尝试使用此代码,而不是你要的方式:

public String performPostCall(String requestURL, HashMap<String, String> postDataParams) { 
    URL url; 
    String response = ""; 
    try { 
     url = new URL(requestURL); 

     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 


     OutputStream os = conn.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
     writer.write(getPostDataString(postDataParams)); 

     writer.flush(); 
     writer.close(); 
     os.close(); 
     int responseCode = conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line = br.readLine()) != null) { 
       response += line; 
      } 
     } else { 
      response = ""; 

     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return response; 
} 

然后你就可以通过编写代码得到的结果:

HashMap<String, String> params = new HashMap<String, String>(); 
    postDataparams.put("key", value); 
String response = performPostCall("url", postDataParams); 

这样你就可以得到响应你的服务器。在服务器端,只需输入echo即可发送到设备。没有别的事情需要去做。这个异步线程将等待,直到它从服务器获得响应。

希望这会有所帮助。

+0

只需在我的PHP端回显“你好”会起作用吗?还是我必须写更多东西来处理回应? –

+0

回声“回应”;将以响应的形式发回字符串。 –

+0

它工作完美,简单易行。感谢学习者。 –