android-async-http post request with body

流过昼夜 提交于 2019-11-28 11:16:08

问题


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:

  1. use post request with body(there is a parameter suggestion content)
  2. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!