0

At the risk of winning StackOverloads "Dumbass of the Year Award" I'm still having problems with this (sigh). My other posts on this have been:

The call comes from a submenu:

public boolean onOptionsItemSelected(MenuItem item){
        pob = new Prefs();// public Prefs pob; in field vars
    switch (item.getItemId()){
//-------------------------------------Options menu----------------------------------------
    case R.id.about:
        //Toast.makeText(this, "About menu", Toast.LENGTH_SHORT).show();
        //showAbout();  
        return true;
    case R.id.locale:
        //Toast.makeText(this, "Locale menu", Toast.LENGTH_SHORT).show();
        return true;

//-----Sub menu----------
    case R.id.uk_item://<-- USING THIS BLOCK FOR CALL
    Toast.makeText(this, "UK selected in UsFM", Toast.LENGTH_SHORT).show();// this is ok
        Log.i(LogTag, "UK selected");
        if(pob.isUk&&item.isChecked()){
            item.setChecked(true);
        }else item.setChecked(false);
        pob.changeLocale(this,"uk");
        //finish();
        return true;
    case R.id.us_item:
        //Toast.makeText(this, "US already selected", Toast.LENGTH_SHORT).show();
        if(pob.isUs&&item.isChecked()){
            item.setChecked(true);
        }
        else item.setChecked(false);
        pob.setRegion("us");
        pob.getRegion(this);
        finish();
        return true;
    case R.id.eu_item:
        Toast.makeText(this, "EU selected", Toast.LENGTH_SHORT).show();
        if(pob.isEu&&item.isChecked()){
            item.setChecked(true);
//          pob.changeLocale("eu");
        }else item.setChecked(false);
        return true;
    default :
        return super.onOptionsItemSelected(item);

        }

It calls this method in the Prefs class:

public void changeLocale(Context cxt,String locale){
    try{
    String l=locale;
     if(l.equals("uk")){
        this.isUk=true;
        Log.i(Log_tag,l);
        //Toast.makeText(this, "UK region selected in Prefs",Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(cxt, Uk.class);
        Log.i(Log_tag,"intent run");
        startActivity(intent);// <--- ERROR HERE
    }else if(l.equals("eu")){
        this.isEu=true;
        //Toast.makeText(this, "EU region selected", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(cxt, Eu.class);
        startActivity(intent);
    }else if(l.equals("us")){
        this.isUs=true;
        //Toast.makeText(this, "Us region selected", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(cxt, Us.class);
        startActivity(intent);
    }else if (l.equals("")){
        Log.i(Log_tag,"no locale passed in");
        finish();
    }
    }catch (NullPointerException e){
        e.printStackTrace();
        Log.i(Log_tag, "Null Pointer Error in changeLocale()"+e);
        finish();
    }
}

The stack trace is:

05-26 13:53:05.880: WARN/System.err(478): java.lang.NullPointerException
05-26 13:53:05.890: WARN/System.err(478):     at android.app.Activity.startActivityForResult(Activity.java:2661)
05-26 13:53:05.900: WARN/System.err(478):     at android.app.Activity.startActivity(Activity.java:2705)
05-26 13:53:05.900: WARN/System.err(478):     at com.silifeform.android.Prefs.changeLocale(Prefs.java:70)
05-26 13:53:05.900: WARN/System.err(478):     at       com.silifeform.android.Us.onOptionsItemSelected(UsFuelMoney.java:347)
05-26 13:53:05.910: WARN/System.err(478):     at android.app.Activity.onMenuItemSelected(Activity.java:2096)
05-26 13:53:05.910: WARN/System.err(478):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:825)
05-26 13:53:05.920: WARN/System.err(478):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139)

05-26 13:53:05.920: WARN/System.err(478): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813) 05-26 13:53:05.920: WARN/System.err(478): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:120)

Stephan very kindly made some suggestions regarding instantiating the prefs object in onOptionsItemSelected(), but as I am new to both android and java I don't know any other ways to instantiate an object other than the two I have already tried.

Sorry if I'm asking the same question over and over again!

1 Answer 1

1

I usually do this:

Intent intent = new Intent(this, Eu.class);
startActivity(intent);

If that bit gives a nullpointer, that means either the context/this is empty or the Eu.class is empty. Try to walk trough it with the debug mode to check if either of both has a null value. Good luck!

Sign up to request clarification or add additional context in comments.

7 Comments

Thanks Nallath, thats causing the error to occur on the Intent intent line. I don't understand how to ensure how "this" or Eu.class is not empty. Are they not automatically given a context as part of extending Activity?
"this" is keyword that is a pointer to the activity or view the code is called from. The Eu.class shouldn't be empty either, so my guess is that the cxt (context) you are putting in the Intent is empty or not what the Intent needs to function. How is the context set? (Where does it get the context from?) You could always try: Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
I think the context is set in the submenu call:case R.id.uk_item://<-- USING THIS BLOCK FOR CALL Toast.makeText(this, "UK selected in UsFM", Toast.LENGTH_SHORT).show();// this is ok Log.i(LogTag, "UK selected"); if(pob.isUk&&item.isChecked()){ item.setChecked(true); }else item.setChecked(false); pob.changeLocale(this,"uk"); //finish(); return true;
sorry thats not clear. In the first area of code above, theres the line pob.changeLocale(this,"uk"); Thanks
Have you tried this: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); I personally never use context to create an Intent and my guess is that is what is causing the problem
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.