如何从我的Android应用程序发送POST信息到PHP网站

时间:2016-12-19 17:33:47

标签: php android post urlconnection

我有一个在我的android布局中构建的表单,并且有一个活动从该表单中获取一些文本并将其附加到变量。

我还有一个PHP表单,可以在到达时处理包含文本的POST变量。

看到HttpClient已被弃用(留下一大堆死的stackOverflow答案),发送POST的最新方法是什么?

我不是在寻找任何复杂的东西 - 只是“这是你如何联系并发送一个孤立的变量。”

更新:我希望得到一个不要求我使用任何外部课程的答案。 android没有独立的这个功能吗?

2 个答案:

答案 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
}
...
相关问题