2016-05-27 59 views
0

我目前正在嘗試使用api上代號的JSONParser。爲什麼JSONParser總是返回一個double?

在後端有一個很長的值發送,但在我的應用程序有一個雙重值分析。

我知道有一種方法說setUseLongs(boolean),我已經將該字段設置爲true。如果我立即解析器並呼叫System.out.println(p.isUseLong)它打印true

但是,該字段仍然被解析爲double值,儘管它是作爲long值發送的。

我在這裏錯過了什麼?

下面是代碼:

@Override 
protected void readResponse(InputStream input) throws IOException { 
    JSONParser.setUseLongs(true); 
    JSONParser p = new JSONParser(); 
    System.out.println(p.isUseLongs()); //true and a Warning to use static methods static... 
    Map<String,Object> data = p.parseJSON(new InputStreamReader(input)); 
    System.out.println(data); //long value already printed as double 
} 

EDIT

這裏是JSON字符串(在最後一行打印,則解析器輸出):

[ 
{createdByUserId=1364.0, //should be int 
createdAtDate=1.464330197735E12, //should be long 
deleted=false, //boolean, correct 
updatedAtDate=1.464330197735E12, //long 
name=Hallo1, //String, correct 
... 
] 
+0

也許更新你的庫可以幫助,因爲有一個與此相關的錯誤:https://github.com/codenameone/codenameone/issues/1254 –

+0

謝謝你,更新我的庫,刷新庫,仍然是相同的 –

+0

它也許有助於向我們展示JSON文本。 –

回答

3
//Assuming all elements are double 
createdByUserId.intvalue(); 
createdAtDate.longValue(); 

JSONParser有一個setUseLongs方法,它將使用l ong對象爲long值,double爲double值。默認情況下,由於兼容性以及Codename One的不便,此功能處於關閉狀態。

目前代號爲一個不包括Number類是所有數值的基類,因此通常在標準的Java,你會做這樣的事情:

long l = ((Number)val).longValue(); 

,你是不是哪個更有意義依賴於解析器返回的內容。不幸的是,在這個時候這不被支持,但我添加了一個問題來解決這個問題here

+0

沒錯。我在答案中添加了一些細節,以解釋爲什麼它是這樣的 –

+0

@ShaiAlmog,@TimWeber這並沒有解決我的問題。變量'createdAt'是double類型的,但沒有函數'longValue()' –

+0

'double'小寫字母d是自動複製的原始類型。確保你使用大寫的「Double」。 –

相關問題