2016-04-28 13 views
0

beginnen, dass der Code ist die AndroidID zu erhalten:Versuch Android_ID bu die App zu bekommen stürzt ab, wenn ich es

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

Wenn ich starten Sie die Anwendung ich die folgende logcat Bewertung erhalten:

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)  

Versuchte mit:

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

auch, hat auch nicht funktioniert. Übrigens ist mir klar, dass es keine perfekte Art ist, Benutzer zu erkennen, da sich die Nummer aufgrund von Werkseinstellungen ändern oder das Telefon wechseln kann.

Antwort

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

Sie versuchen, eine Methode aufrufen, die Sie von Activity aus einem Feldinitialisierer erben. Mach das nicht. Im Allgemeinen sollten Sie geerbte Methoden unter Activity erst aufrufen, nachdem in Ihrer onCreate() Methode super.onCreate() aufgerufen wurde. Sie können gerne ein Feld haben, aber initialisieren Sie es erst nach super.onCreate().

1

Sie können getContentResolver erst nach Abschluss des Konstruktors verwenden. Setzen Sie diese Variable stattdessen in Ihrem onCreate und Sie sollten in Ordnung sein