小部件中的空指针异常

时间:2012-09-13 08:59:58

标签: android exception pointers null

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;
}

3 个答案:

答案 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 =""代码中的任何位置?)