类型数量'长'在java中打印时更改其值

时间:2015-03-20 09:15:37

标签: java json parsing long-integer

我解析JSON数据并且有书ID,这是一个很大的数字:

  

"图书":[{" ID":88401542,"标题":"建筑和测试   Gradle"," SubTitle":"了解下一代   构建","描述":"构建和测试用Java和Java编写的软件   许多其他语言与Gradle,开源项目自动化   受到很多关注的工具。这个简洁的介绍   提供了大量的代码示例来帮助您探索Gradle,它们都是一个   b   ..."},{" ID":2676913857 ...}

long book_id = 0 ;
try {
book_id = jsonBook.getInt(BOOK_ID);
Log.v(LOG_TAG, "book id: " + );
它打印出一些愚蠢的负数:

  

书号:-1814548740

是什么原因?是不是因为我没有铸造就打印出来? 我的日志声明应该是:

  

Log.v("图书ID:" + new Long(book_id));

  

Log.v("书籍ID:" + new Long(book_id.toString()));

  

Log.v(" book id:" + new String(new Long(book_id)));

4 个答案:

答案 0 :(得分:1)

这个值可能超过Integer.MAX_VALUE。更好地使用BigInteger

BigInteger book_id = BigInteger(jsonBook.getText(BOOK_ID));

我不确定getText()是否正确,但我们的想法是将值提取为String

答案 1 :(得分:1)

我认为你的问题在于:

book_id = jsonBook.getInt(BOOK_ID);

如果getInt(BOOK_ID)返回溢出int类型的数字,那么您不应期望它能正常工作。 (由于方法名称,我猜测int

如果JSON API具有getLong方法,您可以检查它是否存储为字符串,并使用Long.valueOfLong.parseLong等等...

答案 2 :(得分:1)

您使用getInt()阅读long。如果你试图读取的长值大于int,那么你得到的是正常的。

答案 3 :(得分:1)

由于您的Book_ID很长,因此您应该使用getLong来获取值:

book_id = jsonBook.getLong(BOOK_ID);