首页 文章

Android将String转换为StringEntity时的值不正确

提问于
浏览
0

我正在使用HttpPost向服务器发送一个字符串 . 这个字符串是一个JSONObject,我之前已经转换为String到目前为止一切正常...它必须与内容类型“application / json”一起发送 .

要发送它,将我的String转换为StringEntity并添加到httpPost.setEntity(my_string)...问题是服务器告诉我无法识别数据(已准备好接收转换为String的JSONObject)

在我的代码中,我在转换为StringEntity之前使用日志来了解String的值,结果如下:

String: {"Gender":"male","User":"Pedro","Email":"ejemplo@ejemplo.com","Language":"English"}

但是,当我将此String转换为StringEntity时,Log的结果,而不是相同,它如下所示:

String: org.apache.http.entity.StringEntity@16a4bc74

为什么?

我不知道我做错了什么......

我搜索了一下,发现了很多例子,我想我正确地做了......我不明白这个错误 . 为什么字符串在转换为StringEntity时没有保持值?

我尝试了很多例子,例如http://hmkcode.com/android-send-json-data-to-server/等等 .

这是我的代码 .

我非常感谢你的帮助 .

问候 .

public static JSONObject makeServiceCall(String url,JSONObject params){

try {

    Log.i("dmode", "LLegan los valores:" + " " + params);

    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpEntity httpEntity = null;
    HttpResponse httpResponse = null;
    HttpPost httpPost = new HttpPost(url);


    if (params != null) {

        String conversion = params.toString();

        Log.i("dmode", "JSONBoject to String" + " " + conversion);

        StringEntity se;
        se = new StringEntity(conversion);

        Log.e("dmode", "String to StringEntity" + " " + se);

        // Set HTTP parameters
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");
        httpPost.setEntity(se);

    }

    String response = null;

    httpResponse = httpClient.execute(httpPost);
    httpEntity = httpResponse.getEntity();
    response = EntityUtils.toString(httpEntity);

    try {
        jObject = new JSONObject(response);
    } catch (Exception e) {

    }

    Log.i("dmode", "Devolución" + jObject);

} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

return jObject;

}

1 回答

  • 1

    尝试使用URL连接:

    public JSONObject readJSONFromURL(String urlString, JSONObject param){
            String response = null;
            JSONObject jObject = null;
            try {           
                URL url = new URL(urlString);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("dmode", param.toString()));
                OutputStream os = conn.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
                writer.write(getQuery(params));
                writer.flush();
                writer.close();
                os.close();
                conn.connect();
                BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
                response = getStringFromInputStream(in);
                jObject = new JSONObject(response);
            } catch (UnsupportedEncodingException e) {
                Log.e("ERROR", "UnsupportedEncodingException " + e.toString());
            }  catch (IOException e) {
                Log.e("ERROR", "IOException " + e.toString());
            } catch (JSONException e) {
                Log.e("ERROR", "JsonException: " + e.toString());
            }
            return jObject;
        }
    
        private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
        {
            StringBuilder result = new StringBuilder();
            boolean first = true;
            for (NameValuePair pair : params)
            {
                if (first)
                    first = false;
                else
                    result.append("&");
                result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
                result.append("=");
                result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
            }
            return result.toString();
        }
    
        private String getStringFromInputStream(InputStream is) { 
            BufferedReader br = null;
            StringBuilder sb = new StringBuilder();
            String line;
            try {
                br = new BufferedReader(new InputStreamReader(is));
                while ((line = br.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (br != null) {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return sb.toString();
        }
    

相关问题