我解析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)));
答案 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.valueOf
,Long.parseLong
等等...
答案 2 :(得分:1)
您使用getInt()
阅读long
。如果你试图读取的长值大于int,那么你得到的是正常的。
答案 3 :(得分:1)
由于您的Book_ID很长,因此您应该使用getLong
来获取值:
book_id = jsonBook.getLong(BOOK_ID);