Android 小部件中的空指针异常
team1name在小部件类的开头初始化 字符串team1name=null 但是当我从Android 小部件中的空指针异常,android,exception,pointers,null,Android,Exception,Pointers,Null,team1name在小部件类的开头初始化 字符串team1name=null 但是当我从getAcronym()返回一个字符串并分配给team1name时,我得到一个空指针异常。我如何解决这个问题 这是密码 public void onReceive(Context context, Intent intent){ Bundle extras = intent.getExtras(); if (extras == null) { return; }
getAcronym()
返回一个字符串并分配给team1name时,我得到一个空指针异常。我如何解决这个问题
这是密码
public void onReceive(Context context, Intent intent){
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
team1name = extras.getString("team1name");
team2name = extras.getString("team2name");
team1score = extras.getString("team1score");
team2score=extras.getString("team2score");
player1=extras.getString("player1");
player2=extras.getString("player2");
extras=null;
team1name=getAcronym(team1name); // Null Pointer Exception
team2name=getAcronym(team2name);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.team1name, team1name);
remoteViews.setTextViewText(R.id.team2name,
ComponentName cn = new ComponentName(context, MyWidgetProvider.class);
AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews);
}
String getAcronym(String teamName){
if(teamName.equals("Australia")){
teamName="AUS";
}else if(teamName.equals("Pakistan")){
teamName="PAK";
}else if(teamName.equals("India")){
teamName="IND";
}else if(teamName.equals("England")){
teamName="ENG";
}else if(teamName.equals("Sri Lanka")){
teamName="SL";
}else if(teamName.equals("South Africa")){
teamName="RSA";
}
return teamName;
}
如果我正确理解了您的代码,那么如果extras.getString(“team1name”)不存在,就会发生Nullpointer异常。在调用getAcronym之前,应该调试项目并确认team1name变量已设置为字符串 (您是否正确定义了变量?String team1name=“”代码中的任何地方?您的
getAcronym(String teamName)
方法不会执行任何空检查。添加行:
if(teamName==null){
return "";
}
在您开始检查字符串值之前,这将缓解您的问题
可能正在进行工作检查,以了解为什么teamName被传递为null,如果是有意的,那么此解决方案将正常工作。如果您应该始终通过发送一个有效的团队名称,那么在您访问小部件之前,您的代码中有一个地方没有正确分配
此外,如果字符串不是常量,也就是说,它们可能是“England”或“England”,则应该在忽略案例的情况下进行比较,以捕捉这些实例
i、 e
Bundle#getString(字符串键)
如果未找到映射,则返回null
。看
除了在getAcronym(String teamName)
中检查null
之外,您还可以使用getString(String key,String defaultValue)
来设置默认值(如果找不到映射)。例如:
team1name = extras.getString("team1name","");
在getAcronym(String teamName)
中的String
比较中,还可以反转比较以避免空指针。这是一个好习惯:
if("Australia".equals(teamName)){
在调试器中单步执行代码。您的extras捆绑包不包含键为“team1name”的字符串值,或者team1name的值与getAcronym中的选项不匹配(由于您传入了null值,因此如果if语句均为true,则将返回null值。作为一种良好做法,您至少应将字符串初始化为空字符串,并使用getAcronym返回的默认值。此外,还应在getAcronym中声明一个返回值,设置它并根据测试返回它。Extras bundle会这样做。)有字符串。小部件显示首字母缩写。但当我启动小部件应用程序时,我收到一条消息,对应用程序崩溃表示抱歉,即使在这之后,我仍然看到应用程序正在工作。
if("Australia".equals(teamName)){