我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
我对PHP、JavaScript和许多其他脚本语言很有经验,但我对Java或Android没有太多经验。
我正在寻找一种方法将POST数据发送到PHP脚本并显示结果。
当前回答
在新版本的Android中,你必须把所有的web I/O请求放到一个新的线程中。AsyncTask最适合小请求。
其他回答
使用来自Square的开源okHttp库。okHttp适用于Android 2.3及以上版本,并在GitHub上拥有Apache 2.0许可证。
发送POST数据就像在AsyncTask中添加以下内容一样简单:
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("email", emailString) // A sample POST field
.add("comment", commentString) // Another sample POST field
.build();
Request request = new Request.Builder()
.url("https://yourdomain.org/callback.php") // The URL to send the data to
.post(formBody)
.build();
okHttp在maven上也有一个命名空间,所以将它添加到Android Studio项目很简单。只需将编译'com.squareup.okhttp3:okhttp:3.11.0'添加到应用程序的build.gradle中。
完整的代码
在你的活动中添加以下内容:
public class CallAPI extends AsyncTask<String, String, String> {
String emailString;
String commentString;
public CallAPI(String email, String commnt){
emailString = email;
commentString = commnt;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
OkHttpClient client = new OkHttpClient();
RequestBody formBody = new FormBody.Builder()
.add("email", emailString) // A sample POST field
.add("comment", commentString) // Another sample POST field
.build();
Request request = new Request.Builder()
.url("https://yourdomain.org/callback.php") // The URL to send the data to
.post(formBody)
.build();
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
并将其称为using:
new CallAPI(emailString, commentString).execute();
您可以使用以下方法向URL发送HTTP-POST请求并接收响应。我总是用这个:
try {
AsyncHttpClient client = new AsyncHttpClient();
// Http Request Params Object
RequestParams params = new RequestParams();
String u = "B2mGaME";
String au = "gamewrapperB2M";
// String mob = "880xxxxxxxxxx";
params.put("usr", u.toString());
params.put("aut", au.toString());
params.put("uph", MobileNo.toString());
// params.put("uph", mob.toString());
client.post("http://196.6.13.01:88/ws/game_wrapper_reg_check.php", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
playStatus = response;
//////Get your Response/////
Log.i(getClass().getSimpleName(), "Response SP Status. " + playStatus);
}
@Override
public void onFailure(Throwable throwable) {
super.onFailure(throwable);
}
});
} catch (Exception e) {
e.printStackTrace();
}
你还需要在libs文件夹中添加风箱Jar文件
android-async-http-1.3.1.jar
最后,我编辑了你的build.gradle:
dependencies {
compile files('libs/<android-async-http-1.3.1.jar>')
}
在最后一个重建你的项目。
在新版本的Android中,你必须把所有的web I/O请求放到一个新的线程中。AsyncTask最适合小请求。
你可以使用URLConnection setDoOutput(true), getOutputStream()(用于发送数据),和getInputStream()(用于接收)。Sun在这方面有一个例子。
对我来说,接下来的工作是:
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;
}