2016-04-28 107 views
0

這就是代碼來獲取AndroidID:試圖讓Android_ID BU應用程序崩潰時我啓動它

String userID = Settings.Secure.getString(getApplicationContext() 
.getContentResolver(), Settings.Secure.ANDROID_ID); 

當我開始我得到以下logcat的審查申請:

04-28 01:30:02.012 9328-9328/com.hubermoritz.beercounter.beercounter02 E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.hubermoritz.beercounter.beercounter02, PID: 9328 
                        java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.hubermoritz.beercounter.beercounter02/com.hubermoritz.beercounter.beercounter02.MainActivity}: java.lang.NullPointerException 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470) 
                         at android.app.ActivityThread.access$900(ActivityThread.java:174) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:146) 
                         at android.app.ActivityThread.main(ActivityThread.java:5593) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
                         at dalvik.system.NativeStart.main(Native Method) 
                         Caused by: java.lang.NullPointerException 
                         at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:114) 
                         at com.hubermoritz.beercounter.beercounter02.MainActivity.<init>(MainActivity.java:48) 
                         at java.lang.Class.newInstanceImpl(Native Method) 
                         at java.lang.Class.newInstance(Class.java:1208) 
                         at android.app.Instrumentation.newActivity(Instrumentation.java:1067) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2296) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)  
                         at android.app.ActivityThread.access$900(ActivityThread.java:174)  
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)  
                         at android.os.Handler.dispatchMessage(Handler.java:102)  
                         at android.os.Looper.loop(Looper.java:146)  
                         at android.app.ActivityThread.main(ActivityThread.java:5593)  
                         at java.lang.reflect.Method.invokeNative(Native Method)  
                         at java.lang.reflect.Method.invoke(Method.java:515)  
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)  
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)  
                         at dalvik.system.NativeStart.main(Native Method)  

試圖用:

public String userID = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 

也沒有工作。順便說一下,我清楚地知道,這不是識別用戶的完美方式,因爲由於出廠重置或更換手機以及其他幾種方式,數字可能會發生變化。

回答

3
Caused by: java.lang.NullPointerException 
    at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:114) 
    at com.hubermoritz.beercounter.beercounter02.MainActivity.<init>(MainActivity.java:48) 

您試圖從字段初始值設定項調用從Activity繼承的方法。不要這樣做。一般來說,在Activity之前,不要調用繼承的方法,直到在onCreate()方法中調用super.onCreate()之後。歡迎您有一個領域,但不要初始化它,直到super.onCreate()之後。

1

在構造函數完成之後,才能使用getContentResolver。而不是你的onCreate設置這個變量,你應該沒問題