我已经搜索了我的问题,并在stackoverflow上搜索了解决方案,但我无法找到解决问题的方法。我正在尝试实现一个函数,该函数检查ANDROID_ID是否已保存在Apps数据库中,或者是否已保存。如果Device的ANDROID_ID为null,则会创建一个随机UUID,然后将其保存在DB中。我的问题是,每当我尝试使用“Ints.tryParse”解析String中的数字时,它返回null,然后应用程序崩溃。我在两个Galaxy S2上试过这个应用程序。它在其中一个上崩溃,但在另一个上运行(一个使用Android 4.1.2 CyanogenMod,另一个使用Stock 4.0)。它也在模拟器中崩溃。顺便说一下,我正在使用谷歌番石榴库来“Ints.tryParse”。
以下是代码:
UUID uuid;
int finalresult = 0;
String android_id = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Log.v(TAG, "Android ID: " + android_id);
String androidid = CharMatcher.DIGIT.retainFrom(android_id);
Log.v(TAG, "Int0: " + androidid);
Integer on2 = Ints.tryParse(androidid);
if(on2 != null) {
if(DEBUG_STATUS == 1) {
Log.v(TAG, "Integer is: " + Integer.toString(on2));
}
int times = 3;
finalresult = on2*times;
if(DEBUG_STATUS == 1) {
Log.v(TAG, "Result: " + Integer.toString(finalresult));
Log.v(TAG, "Device ID: " + android_id + Integer.toString(finalresult));
}
}
else
{
uuid = UUID.randomUUID();
String uuuid = CharMatcher.DIGIT.retainFrom(uuid.toString());
Integer randomuuid = Ints.tryParse(uuuid);
if(randomuuid == null) {
Log.v(TAG, "Was null again...");
}
if(DEBUG_STATUS == 1) {
Log.v(TAG, "Integer null!");
Log.v(TAG, uuuid);
Log.v(TAG, "UUID: " + randomuuid.toString());
}
int times = 3;
finalresult = randomuuid.intValue()*times;
}
以下是模拟器中的LogCat(Android 2.3.3):
> 12-01 16:14:22.505: V/******(410): Android ID: ea58466ebe002707
> 12-01 16:14:51.845:V/******(410): Int0: 58466002707
> 12-01 16:14:51.865: V/******(410): Was null again...
> 12-01 16:14:51.875: V/******(410): Integer null!
> 12-01 16:14:51.875: V/******(410): 801094028350597
> 12-01 16:14:51.925: E/AndroidRuntime(410): FATAL EXCEPTION: main
> 12-01 16:14:51.925: E/AndroidRuntime(410): java.lang.RuntimeException:Unable to start activity ComponentInfo{*****/******}:
> .lang.NullPointerException 12-01 16:14:51.925:
> E/AndroidRuntime(410): at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> android.os.Handler.dispatchMessage(Handler.java:99) 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> android.os.Looper.loop(Looper.java:123) 12-01 16:14:51.925:
> E/AndroidRuntime(410): at
> android.app.ActivityThread.main(ActivityThread.java:3683) 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> java.lang.reflect.Method.invokeNative(Native Method) 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> java.lang.reflect.Method.invoke(Method.java:507) 12-01 16:14:51.925:
> E/AndroidRuntime(410): at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> dalvik.system.NativeStart.main(Native Method) 12-01 16:14:51.925:
> E/AndroidRuntime(410): Caused by: java.lang.NullPointerException 12-01
> 16:14:51.925: E/AndroidRuntime(410): at
> com.actionbarsherlock.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:526)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> com.actionbarsherlock.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:452)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> com.actionbarsherlock.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:438)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
> 12-01 16:14:51.925: E/AndroidRuntime(410): at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
> 12-01 16:14:51.925: E/AndroidRuntime(410): ... 11 more
老实说,我不知道会出现什么问题......如你所见,String不是空的,它实际上显示了设备的ANDROID_ID。
如果您需要更多信息,请告诉我您的需求,然后我会编辑帖子。
答案 0 :(得分:3)
使用Long
(Long.parseLong()
)代替Integer
,因为Integer.MAX_VALUE
= 2 147 483 647,但您的android_id
是58 466 002 707, UUID
是801 094 028 350 597。
Long.MAX_VALUE
是9 223 372 036 854 775 807。