2017-08-08 99 views
-4

我收到一個NPE,同時嘗試使用設備ID作爲字符串。
這裏是我的主類:NPE雖然獲取設備ID爲android

public class Main extends Application { 
public String device_ID(){ 
    final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 
    return tm.getDeviceId(); 
    } 
} 

我試圖打電話與ID代碼:

String device_id = new Main().device_ID(); 
+1

發佈logcat的 – SaravInfern

+0

使用'getApplicationContext()''而不是getBaseContext()',什麼是'KikApplication'? – Piyush

+0

@Piyush我更新了我的問題,忘了在發佈求助時重命名我的課程 – John

回答

0

嘗試使用這種方法,而不是

public class Main extends Application { 
public String device_ID(){ 
    final TelephonyManager tm = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
    return tm.getDeviceId(); 
    } 
} 
0

這樣使用;

主要

public class Main extends Application { 
    public static String device_ID(Activity context){ 
     final TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 
     return tm.getDeviceId(); 
    } 
} 

現在調用這個方法在項目中像這樣:

String device_id = Main.device_ID(MainActivity.this); 
+1

很確定,你不能使用getBaseContext()和靜態方法 – John

+0

然後使用getApplicationContext(); –

+0

等一下...我編輯我的代碼 –

0

創建應用程序的靜態實例,然後在任何地方使用你的應用

public class Main extends Application { 

    private static Main mInstance; 

    public static String device_ID(){ 
     final TelephonyManager tm = (TelephonyManager) mInstance.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
     return tm.getDeviceId(); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mInstance = this; 
    } 
} 

而且你可以從任何地方從您的應用程序調用這個樣子,

Main.device_ID();