team1name在widget类的开头
初始化String team1name = null;
但是当我从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;
}
答案 0 :(得分:1)
您的getAcronym(String teamName)
方法不进行任何空检查。添加以下行:
if(teamName==null){
return "";
}
在开始检查字符串值之前,这应该可以缓解您的问题。
可能正在检查以查看为什么teamName被传递为null,如果它是故意的,那么这个解决方案将正常工作。如果您应该始终发送有效的teamName,那么在您访问未正确分配的小部件之前,代码中会有某个位置。
另外,如果你的字符串不是常数,即它们可以想象为“英格兰”或“英格兰”,你应该做一个比较,忽略这个案例来捕捉这些情况。
即
if(teamName.equalsIgnoreCase("Australia")){
teamName="AUS";
}
答案 1 :(得分:1)
Bundle#getString(String key)
将返回null
。请参阅documentation。
您可以选择使用method null
,而不是检查getAcronym(String teamName)
中的getString(String key, String defaultValue)
,如果找不到映射,则可以设置默认值。例如:
team1name = extras.getString("team1name","");
在String
内的getAcronym(String teamName)
比较中,您还可以反转比较以避免nullpointer。这是一个很好的习惯:
if("Australia".equals(teamName)){
答案 2 :(得分:0)
如果我正确理解你的代码,如果extras.getString(" team1name")不存在,则会发生Nullpointer异常。在调用getAcronym之前,您应调试Project并确认team1name变量是否使用字符串设置。
(您是否正确定义了变量?String team1name =""代码中的任何位置?)