0

team1name 在小部件类的开头初始化

字符串 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;
}
4

3 回答 3

1

您的getAcronym(String teamName)方法不进行任何空值检查。添加行:

if(teamName==null){
    return "";
} 

在您开始检查字符串值之前,这应该可以缓解您的问题。

可能正在检查为什么 teamName 被作为 null 传递,如果是故意的,那么这个解决方案可以正常工作。如果您应该始终通过发送有效的团队名称,那么在您到达您的小部件之前,您的代码中有某个地方没有正确分配它。

此外,如果您的字符串不是常量,即它们可能是“England”或“england”,您应该在忽略大小写的情况下进行比较以捕获这些实例。

IE

 if(teamName.equalsIgnoreCase("Australia")){
    teamName="AUS";
 }
于 2012-09-13T09:07:21.230 回答
1

Bundle#getString(String key)null如果未找到映射则返回。请参阅文档

如果未找到映射,您可以选择使用允许您设置默认值的方法,而不是检查nullin 。例如:getAcronym(String teamName) getString(String key, String defaultValue)

team1name = extras.getString("team1name","");

在您的String比较中,getAcronym(String teamName)您还可以反转比较以避免空指针。这是一个养成的好习惯:

if("Australia".equals(teamName)){
于 2012-09-13T09:24:58.947 回答
0

如果我正确理解您的代码,如果 extras.getString("team1name") 不存在,则会发生 Nullpointer 异常。在调用 getAcronym 之前,您应该调试您的项目并确认使用字符串设置了 team1name 变量。

(您是否正确定义了变量? String team1name = "" 在代码中的任何位置?)

于 2012-09-13T09:06:31.497 回答