开发者

startActivityForResult Null pointer exception. Context?

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:

  • Null Pointer Exception using Intent
  • NullPointerException in SharedPreferences Android
  • How to route the user to the correct activity?

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=开发者_如何学Pythonlocale;
     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!


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!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜