我有一个在我的android布局中构建的表单,并且有一个活动从该表单中获取一些文本并将其附加到变量。
我还有一个PHP表单,可以在到达时处理包含文本的POST变量。
看到HttpClient已被弃用(留下一大堆死的stackOverflow答案),发送POST的最新方法是什么?
我不是在寻找任何复杂的东西 - 只是“这是你如何联系并发送一个孤立的变量。”
更新:我希望得到一个不要求我使用任何外部课程的答案。 android没有独立的这个功能吗?
答案 0 :(得分:0)
这是一个连接和发送孤立变量的小例子
dependencies {
compile 'com.squareup.okhttp3:okhttp:3.1.2'
}
然后你可以获得这些进口
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
<强>的AsyncTask 强>
private class NotifyPassengerDriverArrival extends AsyncTask<Void, Void, String> {
private final String url = Constants.API_PATH + "notify_driver_location?token=" + Constants.TOKEN;
private final OkHttpClient client = new OkHttpClient();
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... voids) {
try {
FormBody formBody = new FormBody.Builder()
.add("passenger_id", passengerID)
.build();
Request.Builder builder = new Request.Builder();
builder.url(url);
builder.post(formBody);
Request request = builder.build();
okhttp3.Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
if (response.code() != 200) {
return null;
}
return "success";
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(String data) {
if (data == null) {
return;
}
else {
Toast.makeText(ReadyToStartTaxiJourneyActivity.this, "You are almost come to pickup location.", Toast.LENGTH_LONG).show();
}
super.onPostExecute(data);
}
}
顺便说一下,SO的答案还没死!如果是这样的话......可能是因为你只挖了那个墓地!
答案 1 :(得分:0)
您可以使用Android Async HTTP Client
http://loopj.com/android-async-http/
摇篮
compile 'com.loopj.android:android-async-http:1.4.9'
静态HTTP客户端
public class RestClient {
public static final String TAG = RestClient.class.getSimpleName();
private static final String BASE_URL = "http://your-site.com/api/v1/whatever";
private static AsyncHttpClient client = new AsyncHttpClient();
public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.get(getAbsoluteUrl(url), params, responseHandler);
}
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.post(getAbsoluteUrl(url), params, responseHandler);
}
private static String getAbsoluteUrl(String relativeUrl) {
return BASE_URL + relativeUrl;
}
}
客户端代码
...
RequestParams params = new RequestParams();
params.put("THE_KEY", "THE_VALUE");
...
AsyncHttpClient client = new AsyncHttpClient();
client.post("YOUR_URL", new AsyncHttpResponseHandler() {
@Override
public void onStart() {
// called before request is started
}
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
}
@Override
public void onRetry(int retryNo) {
// called when request is retried
}
...