Android 小部件中的空指针异常

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

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

如果我正确理解了您的代码,那么如果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)){