我对 PHP、JavaScript 和许多其他脚本语言有经验,但我对 Java 或 Android 没有太多经验。
我正在寻找一种将 POST 数据发送到 PHP 脚本并显示结果的方法。
注意(2020 年 10 月):以下答案中使用的 AsyncTask 在 Android API 级别 30 中已弃用。请参阅 官方文档或此博客文章以获取更多更新示例
更新(2017 年 6 月)适用于 Android 6.0+ 的答案。
public class CallAPI extends AsyncTask<String, String, String> { public CallAPI(){ //set context variables if required } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String urlString = params[0]; // URL to call String data = params[1]; //data to post OutputStream out = null; try { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); out = new BufferedOutputStream(urlConnection.getOutputStream()); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8")); writer.write(data); writer.flush(); writer.close(); out.close(); urlConnection.connect(); } catch (Exception e) { System.out.println(e.getMessage()); } } }
原始答案(2010 年 5 月)
注意:此解决方案已过时。 它仅适用于最高 5.1 的 Android 设备。Android 6.0 及更高版本不包括此答案中使用的 Apache http 客户端。
来自 Apache Commons 的 Http Client 是必经之路。它已经包含在android中。这是一个如何使用它进行 HTTP Post 的简单示例。
public void postData() { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php"); try { // Add your data List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("id", "12345")); nameValuePairs.add(new BasicNameValuePair("stringdata", "Hi")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); } catch (ClientProtocolException e) { // TODO Auto-generated catch block } catch (IOException e) { // TODO Auto-generated catch block } }