Как отправить параметры как параметры формы вместо параметров URL с помощью AsyncHttpClient в Android?

В настоящее время я создаю параметры с:

RequestParams params = new RequestParams();
params.put("Param1","Value1");

А потом выложить как это:

AsyncHttpClient client = new AsyncHttpClient();
client.post(restApiUrl, params, responseHandler);

Однако это делает его параметром URL.

Как добавить его в тело запроса POST в качестве параметра Form?

2 ответа

Я предлагаю использовать залп. Volley - это HTTP-библиотека, которая упрощает и ускоряет работу в сети для приложений Android. Залп доступен на GitHub.

Залп с GET:

RequestQueue queue = Volley.newRequestQueue(getContext);
String url = "http://www.someurl.com?param1=value1&param2=value2"; // your url
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
           // here you will get the response from the url
           Log.d(TAG, response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // in case there is error in request, it'll be thrown here
            Log.e(TAG, error.toString);
        }
    });

    queue.add(stringRequest);

Залп с постом:

RequestQueue queue = Volley.newRequestQueue(getContext);
String url = "http://www.someurl.com"; // your url
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
           // here you will get the response from the url
           Log.d(TAG, response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // in case there is error in request, it'll be thrown here
            Log.e(TAG, error.toString);
        }
    }){
        @Override
        protected Map<String,String> getParams(){
            // here you add params
            Map<String,String> params = new HashMap<>();
            params.put("param1", "value1");
            params.put("param2", "value2");
            return params;
        }
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            return super.getHeaders();
        }

        @Override
        public String getBodyContentType() {
            return super.getBodyContentType();
        }
    };
    queue.add(stringRequest);

Самый простой способ - использовать URL Encoder Class

Пример класса AsyncTask

который получает URL, параметры в аргументах... Вы можете передать любое количество параметров в URL Encoder!

public class LongOperation  extends AsyncTask<String, Void, String> {


    Context context;
    ProgressDialog progressDialog;

    public LongOperation(Context context)
    {
        this.context=context;
        progressDialog=new ProgressDialog(context);
    }


    protected void onPreExecute() {

        progressDialog.setTitle("test");
        progressDialog.setMessage("Loading . . . .");
        progressDialog.setCancelable(false);
        progressDialog.show();
        Toast.makeText(context,"loading . . .",Toast.LENGTH_LONG).show();
    }

    // Call after onPreExecute method
    protected String doInBackground(String... urls) {

        try {
            URL url=new URL(urls[0]);
            URLConnection con=url.openConnection();
            con.setDoOutput(true);

            con.setDoInput(true);

            // request
            OutputStreamWriter io=new OutputStreamWriter(con.getOutputStream());
            // parameters
            io.write(URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode(urls[1], "UTF-8"));
            io.flush();

            // response
            BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream()));

            String line,received="";

            while ((line=reader.readLine())!=null)
            {
                received+=line;
            }
            return received;
        }
        catch (Exception e) {
            return e.getMessage().toString();
        }
    }
    protected void onPostExecute(String un) { 
       if(processDialog.isShowing())
            processDialog.dimiss();

    }
}

Я думаю, это поможет вам! Спасибо

Другие вопросы по тегам