NullPointerException when invoking a self-written class

I am calling from one class to another class. I can set values ​​and get values ​​when creating an object (see. Log), but there are many methods that throw an exception (see. Also log). For example, fry something. If I put the code in a toast something in the source class, it works, if I try to call it, it does not work. In my code below, these things that do not work are commented out ( // code... ).

Here is Main.class:

 public class Main extends Activity { private MyMenu myMenu; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myMenu = new MyMenu (); myMenu.setMyMenu (3, "some text"); int number = myMenu.getMyMenuNumber(); String text = myMenu.getMyMenuString(); Log.d("LOG", "number is " + number + " and text is '" + text + "'."); try { Log.d ("LOG", "startMain error"); //myMenu.startMain(); startActivity(new Intent (this, Page1.class)); } catch (NullPointerException e) { e.printStackTrace(); } try { Log.d ("LOG", "putToast error"); //myMenu.putToast(); Toast.makeText( this, "This is a toast", Toast.LENGTH_LONG) .show(); } catch (NullPointerException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { try { Log.d ("LOG", "inflateMenu error"); //myMenu.inflateMenu(menu); getMenuInflater().inflate(R.menu.menu, menu); } catch (NullPointerException e) { e.printStackTrace(); } return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { try { Log.d ("LOG", "isOptionsButtonClicked error"); //myMenu.isOptionsButtonClicked(item); switch (item.getItemId()) { case R.id.feedback: startActivity(new Intent (this, Page1.class)); break; case R.id.more_information: startActivity(new Intent (this, Page1.class)); break; } } catch (NullPointerException e) { e.printStackTrace(); } return super.onOptionsItemSelected(item); } } 

and this is MyMenu.class:

 public class MyMenu extends Activity { int number; String text; public MyMenu() { } public void setMyMenu (int number, String text) { this.number = number; this.text = text; } public int getMyMenuNumber () { return number; } public String getMyMenuString () { return text; } public void startMain () { startActivity(new Intent (this, Page1.class)); } public void inflateMenu (Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); } public void putToast () { Toast.makeText( this, "This is a toast", Toast.LENGTH_LONG) .show(); } public void isOptionsButtonClicked (MenuItem item) { switch (item.getItemId()) { case R.id.feedback: startActivity(new Intent (this, Page1.class)); break; case R.id.more_information: startActivity(new Intent (this, Page1.class)); break; } } } 

To emphasize this again, running everything in Main.class is fine, but calling other classes does not work.

UPDATE

Here is a partial Log / StackTrace:

 05-15 08:13:13.502: DEBUG/LOG(546): inflateMenu error 05-15 08:13:13.513: WARN/System.err(546): java.lang.NullPointerException 05-15 08:13:13.522: WARN/System.err(546): at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 05-15 08:13:13.522: WARN/System.err(546): at android.view.MenuInflater.inflate(MenuInflater.java:77) 05-15 08:13:13.522: WARN/System.err(546): at com.test.MyMenu.inflateMenu(MyMenu.java:34) 05-15 08:13:13.533: WARN/System.err(546): at com.test.Main.onCreateOptionsMenu(Main.java:52) 05-15 08:13:13.542: WARN/System.err(546): at android.app.Activity.onCreatePanelMenu(Activity.java:2123) 05-15 08:13:13.542: WARN/System.err(546): at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:305) 05-15 08:13:13.542: WARN/System.err(546): at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:550) 05-15 08:13:13.582: WARN/System.err(546): at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1192) 05-15 08:13:13.582: WARN/System.err(546): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1636) 05-15 08:13:13.582: WARN/System.err(546): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2368) 05-15 08:13:13.582: WARN/System.err(546): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2338) 05-15 08:13:13.582: WARN/System.err(546): at android.view.ViewRoot.handleMessage(ViewRoot.java:1641) 05-15 08:13:13.582: WARN/System.err(546): at android.os.Handler.dispatchMessage(Handler.java:99) 05-15 08:13:13.592: WARN/System.err(546): at android.os.Looper.loop(Looper.java:123) 05-15 08:13:13.592: WARN/System.err(546): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-15 08:13:13.602: WARN/System.err(546): at java.lang.reflect.Method.invokeNative(Native Method) 05-15 08:13:13.602: WARN/System.err(546): at java.lang.reflect.Method.invoke(Method.java:521) 05-15 08:13:13.602: WARN/System.err(546): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-15 08:13:13.602: WARN/System.err(546): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-15 08:13:13.602: WARN/System.err(546): at dalvik.system.NativeStart.main(Native Method) 

and

 05-15 08:13:03.592: DEBUG/LOG(546): putToast error 05-15 08:13:03.612: WARN/System.err(546): java.lang.NullPointerException 05-15 08:13:03.621: WARN/System.err(546): at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 05-15 08:13:03.633: WARN/System.err(546): at android.widget.Toast.<init>(Toast.java:89) 05-15 08:13:03.633: WARN/System.err(546): at android.widget.Toast.makeText(Toast.java:231) 05-15 08:13:03.633: WARN/System.err(546): at com.test.MyMenu.putToast(MyMenu.java:37) 05-15 08:13:03.641: WARN/System.err(546): at com.test.Main.onCreate(Main.java:37) 05-15 08:13:03.641: WARN/System.err(546): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 05-15 08:13:03.652: WARN/System.err(546): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 05-15 08:13:03.652: WARN/System.err(546): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 05-15 08:13:03.652: WARN/System.err(546): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 05-15 08:13:03.661: WARN/System.err(546): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 05-15 08:13:03.661: WARN/System.err(546): at android.os.Handler.dispatchMessage(Handler.java:99) 05-15 08:13:03.671: WARN/System.err(546): at android.os.Looper.loop(Looper.java:123) 05-15 08:13:03.671: WARN/System.err(546): at android.app.ActivityThread.main(ActivityThread.java:4363) 05-15 08:13:03.671: WARN/System.err(546): at java.lang.reflect.Method.invokeNative(Native Method) 05-15 08:13:03.683: WARN/System.err(546): at java.lang.reflect.Method.invoke(Method.java:521) 05-15 08:13:03.683: WARN/System.err(546): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 05-15 08:13:03.691: WARN/System.err(546): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 05-15 08:13:03.691: WARN/System.err(546): at dalvik.system.NativeStart.main(Native Method) 

hope this helps!

UDATE 2

Here is the requested Page1.class. But again, everything works fine when I do not use the MyMenu.class class.

 public class Page1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.page1); } } 

Alternatively, you can download the Android project from live / skydrive from microsoft / windows: http://cid-f45ce92851885387.office.live.com/browse.aspx/Stackoverflow

+4
source share
1 answer

I cannot understand why you are passing this method below for another activity:

 public void startMain () { startActivity(new Intent (this, Page1.class)); // this <- here is problem } 

I believe due to a bad mood. Do not do this. Use intentions. Transferring data between activities in Intents in Bundles. In your case, you did not pass the context to MyMenu Activity. MyMenu does not have an Application Context instance, so you get an NPE.

response for comment:
Of course, you can use the static startMain method. But note that 'this' is in the new intent (this, Page1.class). You must pass the activity context from which you start a new activity.

 public static void startMain (Activity context) { context.startActivity(new Intent (context, Page1.class)); } 
0
source

All Articles