2017-08-01 18 views
0

如果我啓動我的android應用程序,應用程序會從數據庫調用一些數據並將此數據保存在設備上的本地SQL數據庫中。有一個數字很大,所以我需要BigInteger來存儲它。如果我嘗試調用來自本地數據庫那個值,我得到的錯誤:來自SQL數據庫的BigInteger值格式錯誤

java.lang.NumberFormatException: Invalid BigInteger: 3.23431e+23 

這是我如何存儲在本地分貝值:

... 
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG, String.valueOf(battery.get(i).getServiceTag())); 
... 
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values); 

這是我如何把它從本地DB:

... 
String serviceTagValue = cursor.getString(
        cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG)); 
batteryFromDb.setServiceTag(new BigInteger(serviceTagValue)); 
... 

我一定像我在全長獲得,而不是與... E + 23的方式,一種特殊的方式來格式化從數據庫中的價值?

編輯: 這是怎樣的列類型將設置:

... 
BatteryEntry.COLUMN_NAME_SERVICE_TAG + " TEXT DEFAULT 0," + 
.... 

當我嘗試

... 
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG, 
String.valueOf(battery.get(i).getServiceTag())); 
... 
Log.i("---",values+""); 
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values); 

外部DB的值保存爲numeric(24,0)當我得到它從那裏我將它保存爲本地數據庫中的字符串。當我做Log.i("---",values+"");( 「值」 將在本地數據庫保存)的數量會顯示正確的:

.... serviceTag=323431303230313631333331 .... 
+0

'無效的BigInteger:3.23431e + 23 '因爲'3.23431e + 23'是一個數字的**字符串表示**。 –

+0

但是,我怎樣才能調用BigInt值? cursor.getBigInt不可能 – WeSt

+0

只需使用'cursor.getLong()' –

回答

0

如果你這樣做,會發生什麼:

String serviceTagValue = cursor.getString(
       cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG)); 
BigDecimal bdec = new BigDecimal(serviceTagValue); 
batteryFromDb.setServiceTag(bdec.toBigInteger()); 
+0

這是相同的錯誤'java.lang.NumberFormatException:Invalid BigInteger:3.23431E + 23' – WeSt

+1

這沒有任何意義。你真的使用BigDecimal嗎? –

+0

抱歉,輸入錯誤。但是這個方法使得數字:'323431303230313631333334'到'323431000000000000000000' – WeSt