问题
It's require to realize a function that user can send feedback to the server in the app.And I use the asynchttpclient in the app.But I don't know how to do this.anyont knows how to do please tell me,thank you very much.
Here is the requirement:
- use post request with body(there is a parameter suggestion content)
- api:api/user/feedback?company_id=&access_token=
While I check the post method of asynchttpclient,I just found the following methods: public RequestHandle post(String url, ResponseHandlerInterface responseHandler) { return post(null, url, null, responseHandler); }
// [-] HTTP POST
// [+] HTTP PUT
/**
* Perform a HTTP POST request with parameters.
*
* @param url the URL to send the request to.
* @param params additional POST parameters or files to send with the request.
* @param responseHandler the response handler instance that should handle the response.
* @return RequestHandle of future request process
*/
public RequestHandle post(String url, RequestParams params, ResponseHandlerInterface responseHandler) {
return post(null, url, params, responseHandler);
}
/**
* Perform a HTTP POST request and track the Android Context which initiated the request.
*
* @param context the Android Context which initiated the request.
* @param url the URL to send the request to.
* @param params additional POST parameters or files to send with the request.
* @param responseHandler the response handler instance that should handle the response.
* @return RequestHandle of future request process
*/
public RequestHandle post(Context context, String url, RequestParams params, ResponseHandlerInterface responseHandler) {
return post(context, url, paramsToEntity(params, responseHandler), null, responseHandler);
}
/**
* Perform a HTTP POST request and track the Android Context which initiated the request.
*
* @param context the Android Context which initiated the request.
* @param url the URL to send the request to.
* @param entity a raw {@link cz.msebera.android.httpclient.HttpEntity} to send with the request, for
* example, use this to send string/json/xml payloads to a server by
* passing a {@link cz.msebera.android.httpclient.entity.StringEntity}.
* @param contentType the content type of the payload you are sending, for example
* application/json if sending a json payload.
* @param responseHandler the response ha ndler instance that should handle the response.
* @return RequestHandle of future request process
*/
public RequestHandle post(Context context, String url, HttpEntity entity, String contentType, ResponseHandlerInterface responseHandler) {
return sendRequest(httpClient, httpContext, addEntityToRequestBase(new HttpPost(getURI(url)), entity), contentType, responseHandler, context);
}
/**
* Perform a HTTP POST request and track the Android Context which initiated the request. Set
* headers only for this request
*
* @param context the Android Context which initiated the request.
* @param url the URL to send the request to.
* @param headers set headers only for this request
* @param params additional POST parameters to send with the request.
* @param contentType the content type of the payload you are sending, for example
* application/json if sending a json payload.
* @param responseHandler the response handler instance that should handle the response.
* @return RequestHandle of future request process
*/
public RequestHandle post(Context context, String url, Header[] headers, RequestParams params, String contentType,
ResponseHandlerInterface responseHandler) {
HttpEntityEnclosingRequestBase request = new HttpPost(getURI(url));
if (params != null) request.setEntity(paramsToEntity(params, responseHandler));
if (headers != null) request.setHeaders(headers);
return sendRequest(httpClient, httpContext, request, contentType,
responseHandler, context);
}
/**
* Perform a HTTP POST request and track the Android Context which initiated the request. Set
* headers only for this request
*
* @param context the Android Context which initiated the request.
* @param url the URL to send the request to.
* @param headers set headers only for this request
* @param entity a raw {@link HttpEntity} to send with the request, for example, use
* this to send string/json/xml payloads to a server by passing a {@link
* cz.msebera.android.httpclient.entity.StringEntity}.
* @param contentType the content type of the payload you are sending, for example
* application/json if sending a json payload.
* @param responseHandler the response handler instance that should handle the response.
* @return RequestHandle of future request process
*/
public RequestHandle post(Context context, String url, Header[] headers, HttpEntity entity, String contentType,
ResponseHandlerInterface responseHandler) {
HttpEntityEnclosingRequestBase request = addEntityToRequestBase(new HttpPost(getURI(url)), entity);
if (headers != null) request.setHeaders(headers);
return sendRequest(httpClient, httpContext, request, contentType, responseHandler, context);
}
回答1:
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("key", value);
client.post(context, URL_YOURURL,
params, new AsyncHttpResponseHandler() {
Progress pd = new Progress(context);
public void onStart() {
super.onStart();
pd.show();
}
@Override
public void onSuccess(int arg0,
Header[] arg1, byte[] arg2) {
try {
JSONObject json = new JSONObject(
new String(arg2));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onFailure(int arg0,
Header[] arg1, byte[] arg2,
Throwable arg3) {
}
public void onFinish() {
super.onFinish();
if(pd!=null){
pd.dismiss();
}
}
});
}
I think You are asking for this example.
回答2:
//entity
JSONObject jsonObject = new JSONObject();
StringEntity entity;
try {
jsonObject.put("suggestion", suggestion);
entity = new StringEntity(jsonObject.toString());
//url
String url = "user/feedback?";
YXUser yxUser = YXUser.currentUser();
//公司id
if (yxUser != null && yxUser.getCompanyId() != null) {
url = url + "company_id=" + yxUser.getCompanyId();
}
if (null != YXPersistence.getValueByKey(AppConstant.APP_TOKEN_KEY)) {
url = url + "&access_token=" + YXPersistence.getValueByKey(AppConstant.APP_TOKEN_KEY);
}
url = AppConstant.BASE_URL + url;
client.post(this, url, entity, "application/json", new MyHttpResponseHandler(this) {
@Override
protected void onNormalResponse(int statusCode, Header[] headers, JSONObject info) {
if (JSONUtil.checkStatusSuccess(info)) {
showToast("上传成功");
finish();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
来源:https://stackoverflow.com/questions/35644560/android-async-http-post-request-with-body