3

像这样的代码:

     JSONObject contentObject = new JSONObject(content);
     JSONObject params = contentObject.getJSONObject("response_params");
     Log.d("onTest", "channel_id:" + params.getString("channel_id"));
     Log.d("onTest", "channel_id:" + params.getLong("channel_id"));

日志打印:

   08-21 12:46:21.470: DEBUG/onTest(25228): onMessage: content : {"response_params":{"appid":"1071410","channel_id":"3537275240990320342","user_id":"714893193627619861"},"request_id":1293438498}
   08-21 12:46:21.480: DEBUG/onTest(25228): channel_id:3537275240990320342
   08-21 12:46:21.480: DEBUG/onTest(25228): channel_id:3537275240990320128

为什么 getLong 的值为 3537275240990320128,而字符串的值为 3537275240990320342?

4

2 回答 2

8

根据此处的文档,

public long getLong (String name)

返回按名称映射的值(如果存在并且是长整数或可以强制为长整数)。请注意,JSON 将数字表示为双精度数,因此这是有损的;使用字符串通过 JSON 传输号码。

编辑: 要自己看,你可以这样做

JSONObject json = new JSONObject();
try {
    json.put("test", "3537275240990320342");
    String str = json.getString("test");
    double dou = Double.parseDouble(str);
    long lo = (long) dou;
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

你会看到,lo当你做的时候,你得到的正是你所得到的价值getLong

于 2013-08-21T05:08:33.070 回答
0

原因很简单...您的 JSON 包含channel_id字符串类型的值...如果您确定您的值channel_id是 long 类型...删除双引号形式的值channel_id

你的新 JSON 看起来像,

{
    "response_params":
        {
            "appid":"1071410",
            "channel_id":3537275240990320342, // here
            "user_id":"714893193627619861"
        },
    "request_id":1293438498
 }

看看这些例子

希望这可以帮助....

于 2013-08-21T05:22:06.073 回答