-1
我创建了一个应用程序类,现在我正在使其实例在其他类中使用,但我面临上下文空问题。应用程序类错误
我的应用程序类别:
public class CommonForApp extends Application {
private static CommonForApp sInstance;
private Utilities mUtilities = null;
private static SharedPreferences mSharedPreferences;
@Override
public void onCreate() {
super.onCreate();
mSharedPreferences = this.getSharedPreferences(
"com.myandroidapp.musicplayer", Context.MODE_PRIVATE);
mContext=this.getApplicationContext();
mUtilities = new Utilities();
}
public CommonForApp() {
}
public static CommonForApp getInstance() {
if (sInstance == null)
sInstance = new CommonForApp();
return sInstance;
}
}
而且在AndroidManifest.xml宣布它是这样的:
<application
android:name="com.android.musicplayer.datastorageandarraylistsaccesser.CommonForApp"
android:largeHeap="true"
android:icon="@drawable/ic_launcher"
android:label="Music" android:allowBackup="true">
我现在用它在其他类这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mApp=CommonForApp.getInstance();
final List<GlobalSongDetails> s=mApp.getGlobalSongsList();
}
我收到以下错误:
03-02 18:50:41.167: E/AndroidRuntime(16177): FATAL EXCEPTION: main
03-02 18:50:41.167: E/AndroidRuntime(16177): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.musicplayer/com.android.musicplayer.Fragmentactivity}: java.lang.NullPointerException
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread.access$600(ActivityThread.java:156)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.os.Looper.loop(Looper.java:153)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread.main(ActivityThread.java:5297)
03-02 18:50:41.167: E/AndroidRuntime(16177): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 18:50:41.167: E/AndroidRuntime(16177): at java.lang.reflect.Method.invoke(Method.java:511)
03-02 18:50:41.167: E/AndroidRuntime(16177): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
03-02 18:50:41.167: E/AndroidRuntime(16177): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-02 18:50:41.167: E/AndroidRuntime(16177): at dalvik.system.NativeStart.main(Native Method)
03-02 18:50:41.167: E/AndroidRuntime(16177): Caused by: java.lang.NullPointerException
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109)
03-02 18:50:41.167: E/AndroidRuntime(16177): at com.android.musicplayer.datastorageandarraylistsaccesser.CommonForApp.makeGlobalSongsList(CommonForApp.java:127)
03-02 18:50:41.167: E/AndroidRuntime(16177): at com.android.musicplayer.datastorageandarraylistsaccesser.CommonForApp.getGlobalSongsList(CommonForApp.java:164)
03-02 18:50:41.167: E/AndroidRuntime(16177): at com.android.musicplayer.Fragmentactivity.onCreate(Fragmentactivity.java:156)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.Activity.performCreate(Activity.java:5122)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
03-02 18:50:41.167: E/AndroidRuntime(16177): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
03-02 18:50:41.167: E/AndroidRuntime(16177): ... 11 more
但是,如果我做这样的实例:
mApp=(CommonForApp) this.getApplicationContext();
我没有得到任何错误。
任何人都可以解释我在做什么错误?
谢谢,提前!
如果我以这种方式使用对象....会有任何问题,如内存泄漏或任何种类的问题? –
应用程序对象在您的应用程序中始终是单例(它只是无法通过任何'getInstance()'方法访问,但它可以通过'context.getAppliactionContext()')访问。因此,默认情况下,您不会以这种方式创建任何内存泄漏,但您可以轻松创建泄漏内存的场景。例如。如果你在应用程序中创建了一些存储空间,那么你必须小心你在那里存储的东西。 – Tomik
上下文的存储意味着什么? –