2017-09-16 176 views
-2

我要创建Android应用程序这个职位的要求,并得到JSON响应:重新编写PHP POST请求到Java andoird POST请求(并得到响应)

function send_post_to_url($url,$post) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch,CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); 
    $return = curl_exec($ch); 
    curl_close($ch); 
    return $return; 
} 

$data['api_key'] = YOUR_API_KEY; 
$data['action'] = 'TestFunction'; 
$response = send_post_to_url('https://api.superget.co.il/',$data); 
echo $response; 

我怎样才能做到这一点?

我曾尝试以下,但连接不断trowing异常

 HttpURLConnection urlConnection; 
     urlConnection = (HttpURLConnection) ((new URL("https://api.superget.co.il").openConnection())); 
     urlConnection.setDoOutput(true); 
     urlConnection.setDoInput(true); 
     urlConnection.setRequestProperty("Content-Type", "application/json"); 
     urlConnection.setRequestProperty("Accept", "application/json"); 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.connect(); 
+0

尝试使用Android例如任何图书馆http://square.github.io/okhttp/ HTTPS: //raw.githubusercontent.com/square/okhttp/master/samples/guide/src/main/java/okhttp3/guide/PostExample.java –

回答

0

试试我的代码:

sendPost方法:

public boolean sendPost(Map<String, Object> params, String urlAddress) { 

     URL url; 
     HttpURLConnection urlConnection = null; 

     try { 

      StringBuilder postData = new StringBuilder(); 
      for (Map.Entry<String, Object> param : params.entrySet()) { 
       if (postData.length() != 0) postData.append('&'); 
       postData.append(URLEncoder.encode(param.getKey(), "UTF-8")); 
       postData.append('='); 
       postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8")); 
      } 
      byte[] postDataBytes = postData.toString().getBytes("UTF-8"); 

      url = new URL(urlAddress); 
      urlConnection = (HttpURLConnection) url.openConnection(); 


      //urlConnection.setReadTimeout(10000 /* milliseconds */); 
      //urlConnection.setConnectTimeout(15000 /* milliseconds */); 

      //add reuqest header 
      urlConnection.setRequestMethod("POST"); 
      urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      urlConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length)); 
      urlConnection.setRequestProperty("charset", "utf-8"); 

      //urlConnection.setUseCaches(false); 
      //urlConnection.setInstanceFollowRedirects(false); 


      urlConnection.setDoOutput(true); 
      // Send post request 
      DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); 
      wr.write(postDataBytes); //wr.writeBytes(postData.toString()); 
      wr.flush(); 
      wr.close(); 
      //urlConnection.getOutputStream().write(postDataBytes); 

      /* 
      int responseCode = urlConnection.getResponseCode(); 
      Log.e("ddd", "\nSending 'POST' request to URL : " + url); 
      Log.e("ddd", "Post parameters : " + postData.toString()); 
      Log.e("ddd", "Response Code : " + responseCode); */ 


      String response = ""; 
      BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8")); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) 
       response += inputLine; 
      in.close(); 

      //get response 
      return response.trim().equals("ok"); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (urlConnection != null) 
       urlConnection.disconnect(); 
     } 

     return false; 
    } 

使用:

Map<String, Object> params = new HashMap<>(); 
params.put("param1", txtContactNf.getText().toString()); 
params.put("param2", txtContactNf.getText().toString()); 
final boolean successSend = nu.sendPost(params, "http://yoursite.com/api.php"); 

在这家公司德如果PHP脚本说ok那么我们得到true布尔结果。您可以轻松更改它并获得json结果。

编辑:让JSON结果

代替return response.trim().equals("ok");

String response = ""; 
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8")); 
String inputLine; 
while ((inputLine = in.readLine()) != null) 
response += inputLine; 
in.close(); 

if(response.equals("no")) return null; 

return new JSONObject(response); 

返回类型必须是JSONObject的

+0

对我来说,在用“action”初始化Map instanse后,它不适用于我服务器回应他无法识别我的动作 – AndoridBegginer

+0

@AndoridBegginer什么是响应结果?吐司或登录'回应'并对我说。 –