当前位置: 首页 > 知识库问答 >
问题:

将字符串转换为StringEntity时,Android的值不正确

冯育
2023-03-14

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

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

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

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/,还有更多。

这是我的密码。

我非常感谢你的帮助。

问候。

公共静态JSONObject makeServiceCall(字符串url,JSONObject参数){

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个答案

缪茂勋
2023-03-14

尝试使用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();
    }
 类似资料:
  • 问题内容: 我在mysql中使用NOW()获取当前日期和时间。我想将日期值转换为varchar并将其与另一个字符串连接。我该怎么做? 问题答案: 使用DATE_FORMAT()

  • 如何将字符串值转换为int?我正在获取。 结果应该类似于。

  • 问题内容: 您如何将字符串转换为ASCII值? 例如,“ hi”将返回104105。 我可以单独执行ord(’h’)和ord(’i’),但是在有很多字母的情况下会很麻烦。 问题答案: 您可以使用列表理解:

  • 我正在尝试转换一个表示存储在SQLite中的日期的字符串。 日期存储到sqlite中,如下所示: 根据Java文档,方法: 返回此日期的字符串表示形式。格式设置相当于使用具有格式字符串“eee MMM dd hh:mm:ss zzz yyyy”的SimpleDateFormat,看起来类似于“tue Jun 22 13:07:00 PDT 1999”。则使用当前默认时区和区域设置。如果需要控制时区

  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 如何将字符串值转换为整数,并将转换后的值乘以整数,这样我就可以得到300.00的结果。见下面的例子- 如果我像这样编码,那么我就会出错-