问题描述
|
冒着赢得StackOverloads \“年度最佳女低音奖”的风险,我仍然对此有疑问。我对此的其他帖子是:
使用Intent的Null指针异常
Android SharedPreferences中的NullPointerException
如何将用户引导至正确的活动?
该调用来自一个子菜单:
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);
}
它在Prefs类中调用此方法:
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\",Eu.class);
startActivity(intent);
}else if(l.equals(\"us\")){
this.isUs=true;
//Toast.makeText(this,\"Us region selected\",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();
}
}
堆栈跟踪为:
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):在com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813)
05-26 13:53:05.920:WARN / System.err(478):在com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:120)
史蒂芬(Stephan)非常友善地提出了一些有关实例化onOptionsItemSelected()
中的prefs对象的建议,但是由于我对android和java都是陌生的,除了我已经尝试过的两个实例之外,我不知道其他任何实例化对象的方法。
抱歉,如果我一次又一次地问同样的问题!
解决方法
我通常这样做:
Intent intent = new Intent(this,Eu.class);
startActivity(intent);
如果该位给出空指针,则意味着上下文/此为空或Eu.class为空。尝试以调试模式运行它,以检查两者是否都为空值。
祝好运!