发送JSON由AsyncHttpClient POST请求到服务器 [英] Send JSON as a POST request to server by AsyncHttpClient

查看:1458
本文介绍了发送JSON由AsyncHttpClient POST请求到服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望能够通过AsyncHttpClient发送JSON作为POST到我的本地服务器。我用这个方法:
公共无效后(上下文的背景下,字符串URL,HttpEntity实体,字符串的contentType,AsyncHtt presponseHandler ResponseHandler所)
 在我的code,但它不工作。这里是我的code:

 私人无效loginUser()抛出JSONException,UnsupportedEncodingException {
    字符串登录= textLogin.getText()的toString()。
    。字符串密码= textPassword.getText()的toString();    的JSONObject的JSONObject =新的JSONObject();
    如果(Utility.isNotNull(登录)及和放大器; Utility.isNotNull(密码)){
        jsonObject.put(用户名,登录);
        jsonObject.put(密码,密码);
        invokeWS(JSONObject的);
    }
    其他{
        Toast.makeText(getApplicationContext(),Proszęwypełnićwszystkie波拉!,Toast.LENGTH_LONG).show();
    }
}私人无效invokeWS(JSONObject的JSONObject的)抛出UnsupportedEncodingException {
    StringEntity实体=新StringEntity(jsonObject.toString());
    AsyncHttpClient客户端=新AsyncHttpClient();    Log.i(SER,HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/ AUTH+实体);
    Log.i(SER,HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/ AUTH+ JSONObject的);    client.post(getApplicationContext(),HTTP://+ Constants.address +:+ Constants.port +/ silownia_java / REST /登录/身份验证,实体,应用/ JSON,新JsonHtt presponseHandler(){
        @覆盖
        公共无效的onSuccess(INT状态code,头[]头,OBJ的JSONObject){
            尝试{
                Log.i(SER,在这里!);
                字符串登录= obj.getString(登录);
                INT ID = obj.getInt(ID);                //user.setUserId(obj.getInt(\"userid));
            }赶上(JSONException E){
                // TODO自动生成catch块
                Toast.makeText(getApplicationContext(),出现错误[服务器的JSON响应可能无效]!,Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }        @覆盖
        公共无效onFailure处(INT状态code,头[]头,抛出的Throwable,JSONObject的errorResponse){
            如果(状态code == 404){
                Toast.makeText(getApplicationContext(),404 - 聂odnaleziono serwera!,Toast.LENGTH_LONG).show();
            }否则如果(状态code == 500){
                Toast.makeText(getApplicationContext(),500 - COSposzło聂德宝希隆斯克斯拖serwera!,Toast.LENGTH_LONG).show();
            }否则如果(状态code == 403){
                Toast.makeText(getApplicationContext(),Podano niepoprawne丹麦人!,Toast.LENGTH_LONG).show();
            }其他{
                Toast.makeText(getApplicationContext(),throwable.toString(),Toast.LENGTH_LONG).show();
            }
        }
    });
}

我的日志看起来不错:

<$p$p><$c$c>http://MY_IP_ADDRESS:8080/silownia_java/rest/login/authorg.apache.http.entity.StringEntity@384d6a6d
HTTP:// MY_IP_ADDRESS:8080 / silownia_java / REST /登录/ AUTH {用户名:barni,密码:12345}

但我得到这样的错误:

  org.apache.http.client.Htt presponseException:不支持的媒体类型

Additionaly,我知道,服务器不会得到任何请求。那么,是什么原因可能是?


解决方案

我解决了这个问题,通过添加标题信息到我的实体对象。

  ByteArrayEntity实体=新ByteArrayEntity(jsonObject.toString()的getBytes(UTF-8));
entity.setContentType(新BasicHeader(HTTP.CONTENT_TYPE,应用/ JSON));

I want to be able to send JSON as a POST to my localhost server by AsyncHttpClient. I'm using this method: public void post(Context context, String url, HttpEntity entity, String contentType, AsyncHttpResponseHandler responseHandler) in my code but it doesn't work. Here is my code:

private void  loginUser() throws JSONException, UnsupportedEncodingException {
    String login = textLogin.getText().toString();
    String password = textPassword.getText().toString();

    JSONObject jsonObject = new JSONObject();
    if(Utility.isNotNull(login) && Utility.isNotNull(password)) {
        jsonObject.put("username", login);
        jsonObject.put("password", password);
        invokeWS(jsonObject);
    }
    else{
        Toast.makeText(getApplicationContext(), "Proszę wypełnić wszystkie pola!", Toast.LENGTH_LONG).show();
    }
}

private void invokeWS(JSONObject jsonObject) throws UnsupportedEncodingException {
    StringEntity entity = new StringEntity(jsonObject.toString());
    AsyncHttpClient client = new AsyncHttpClient();

    Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + entity);
    Log.i("SER", "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth" + jsonObject);

    client.post(getApplicationContext(), "http://" + Constants.address + ":" + Constants.port + "/silownia_java/rest/login/auth", entity, "application/json", new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject obj) {
            try {
                Log.i("SER", "HERE!");
                String login = obj.getString("login");
                int ID = obj.getInt("id");

                //user.setUserId(obj.getInt("userid"));
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                Toast.makeText(getApplicationContext(), "Error Occured [Server's JSON response might be invalid]!", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
            if (statusCode == 404) {
                Toast.makeText(getApplicationContext(), "404 - Nie odnaleziono serwera!", Toast.LENGTH_LONG).show();
            } else if (statusCode == 500) {
                Toast.makeText(getApplicationContext(), "500 - Coś poszło nie tak po stronie serwera!", Toast.LENGTH_LONG).show();
            } else if (statusCode == 403) {
                Toast.makeText(getApplicationContext(), "Podano niepoprawne dane!", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getApplicationContext(), throwable.toString(), Toast.LENGTH_LONG).show();
            }
        }
    });
}

My Logs looks ok:

http://MY_IP_ADDRESS:8080/silownia_java/rest/login/authorg.apache.http.entity.StringEntity@384d6a6d
http://MY_IP_ADDRESS:8080/silownia_java/rest/login/auth{"username":"barni","password":"12345"}

But i get such error:

org.apache.http.client.HttpResponseException: Unsupported Media Type

Additionaly, I know that server doesn't get any request. So, what the cause could be?

解决方案

I solved it, by adding header information to my entity object.

ByteArrayEntity entity = new ByteArrayEntity(jsonObject.toString().getBytes("UTF-8"));
entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

这篇关于发送JSON由AsyncHttpClient POST请求到服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆