我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
当前回答
在新版本的Android中,你必须把所有的web I/O请求放到一个新的线程中。AsyncTask最适合小请求。
其他回答
下面的方法适用于最新的Android库和使用okhttp。
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("key1", "value1")
.add("key2", "value2") //optional
.add("key3", "value3") //optional
.add("key4", "value4") //optional
.build();
Request request = new Request.Builder()
.url("http://.....") //URL
.post(formBody)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
e.getStackTrace();
}
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
if(response.isSuccessful()){
ResponseBody responseBody = response.body();
Log.e("TAG_", responseBody.string());
}
}
你可以使用URLConnection setDoOutput(true), getOutputStream()(用于发送数据),和getInputStream()(用于接收)。Sun在这方面有一个例子。
方法将数据作为HTTP请求发布,
public static InputStream callPostService(String Url,
List<NameValuePair> data) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Url);
try {
httppost.setEntity(new UrlEncodedFormEntity(data));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
return entity.getContent();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
最好使用Apache Commons HttpClient,它已经包含在android中了。 看一看 Android开发人员:Apache HTTP客户端包摘要 一般API信息。
对我来说,接下来的工作是:
private sendData() {
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("key1", value1);
jsonObject.accumulate("key2", value2);
boolean success = sendPost(SERVER_URL + "/v1/auth", jsonObject);
}
private boolean sendPost(String url, JSONObject parameters) {
boolean requestResult = false;
InputStream inputStream = null;
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String json = "";
json = parameters.toString();
StringEntity se = new StringEntity(json);
httpPost.setEntity(se);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
if (inputStream != null) {
result = convertInputStreamToString(inputStream);
requestResult = true;
} else {
result = "Did not work!";
requestResult = false;
}
System.out.println(result);
} catch (Exception e) {
Log.d("InputStream", e.getLocalizedMessage());
requestResult = false;
}
return requestResult;
}