Я создал класс applicaion, теперь я делаю его экземпляр для использования в других классах, но я столкнулся с проблемой нулевого контекста.Ошибка класса приложения
Мой класс Применение:
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
Хранение контекста, которое вы имеете в виду? –