Я пытаюсь создать экземпляр диалога в своей деятельности.NPE при создании экземпляра диалогового окна
public void createOptionsMenu() {
Log.e("ActivityContext null?","" + myActivity.this);
myOptionsDialog = new Dialog(myActivity.this); //throwsNPE
myOptionsDialog.setContentView(R.layout.options_dialog);
myOptionsDialog.show();
}
Благодаря Log.e, которые вы можете видеть выше, я знаю, что мой activity-context
не равно нулю!
12-21 15:17:15.466: E/ActivityContext null?(3774): [email protected]
12-21 15:17:15.469: E/AndroidRuntime(3774): java.lang.NullPointerException
Я думаю проблема в том, что я называю createOptionsMenu()
из другого класса, который имеет только ApplicationContext
от myActivity
. Если да, как я могу создать свой диалог, не передавая ActivityContext
другому классу, который вызывает createOptionsMenu
.
Любая помощь приветствуется.
Update:
12-21 15:17:15.469: E/AndroidRuntime(3774): FATAL EXCEPTION: main 12-21 15:17:15.469: E/AndroidRuntime(3774): java.lang.NullPointerException 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:140) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:103) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.app.Dialog.<init>(Dialog.java:154) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.app.Dialog.<init>(Dialog.java:131) 12-21 15:17:15.469: E/AndroidRuntime(3774): at com.android.myproject.myActivity.createOptionsMenu(myActivity.java:798) 12-21 15:17:15.469: E/AndroidRuntime(3774): at com.android.myproject.WorkerClass$2.onItemLongClick(WorkerClass.java:448) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.widget.AbsListView.performLongPress(AbsListView.java:2883) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:2833) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.os.Handler.handleCallback(Handler.java:725) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.os.Handler.dispatchMessage(Handler.java:92) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.os.Looper.loop(Looper.java:153) 12-21 15:17:15.469: E/AndroidRuntime(3774): at android.app.ActivityThread.main(ActivityThread.java:5338) 12-21 15:17:15.469: E/AndroidRuntime(3774): at java.lang.reflect.Method.invokeNative(Native Method) 12-21 15:17:15.469: E/AndroidRuntime(3774): at java.lang.reflect.Method.invoke(Method.java:511) 12-21 15:17:15.469: E/AndroidRuntime(3774): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 12-21 15:17:15.469: E/AndroidRuntime(3774): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 12-21 15:17:15.469: E/AndroidRuntime(3774): at dalvik.system.NativeStart.main(Native Method)
Instantiate активность:
myActivity myActivity_ = new myActivity();
WeakReference<myActivity> myWeakActivity = new WeakReference<myActivity>(myActivity_);
myWeakActivity.get().createOptionsMenu();
Опубликовать исключение stacktrace и как вы инициализируете 'myActivity'. – laalto
@laalto Я обновил свой вопрос. Что значит инициализация? myActivity? Это моя «MainActivity». Я относительно новичок в Android, поэтому я не уверен, что вы имеете в виду. – MMike
Я имею в виду, как переменная 'myActivity' получает значение и откуда. Из stacktrace очевидно, что вы создаете свою деятельность с помощью 'new', чего вы никогда не должны делать. – laalto