Как отправить параметры как параметры формы вместо параметров 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¶m2=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();
}
}
Я думаю, это поможет вам! Спасибо