2016-04-28 5 views
0

Вот код, чтобы получить AndroidID:Попытка получить Android_ID бу App падает, когда я запустить его

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 до тех пор, пока super.onCreate() не будет вызван в ваш метод onCreate(). У вас есть поле, но не инициализируйте его до super.onCreate().

1

Вы не можете использовать getContentResolver до тех пор, пока конструктор не будет завершен. Установите эту переменную в свой onCreate, и вы должны быть в порядке