簡體   English   中英

小部件中的空指針異常

[英]Null Pointer exception in widget

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

您的getAcronym(String teamName)方法不執行任何空檢查。 添加行:

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

在開始檢查字符串值之前,這應該可以緩解您的問題。

可能正在檢查以查看為什么teamName被傳遞為null,如果它是故意的,那么這個解決方案將正常工作。 如果您應該始終通過發送有效的teamName,那么在您訪問未正確分配的小部件之前,代碼中會有某個位置。

此外,如果你的字符串不是常數,即它們可以想象為“英格蘭”或“英格蘭”,你應該進行比較,忽略大小寫以捕捉這些情況。

 if(teamName.equalsIgnoreCase("Australia")){
    teamName="AUS";
 }

Bundle#getString(String key)如果找不到映射則返回null 請參閱文檔

您可以使用getString(String key, String defaultValue) 方法,而不是在getAcronym(String teamName)檢查null ,如果找不到映射,則允許您設置默認值。 例如:

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

getAcronym(String teamName) String比較中,您還可以反轉比較以避免nullpointer。 這是一個很好的習慣:

if("Australia".equals(teamName)){

如果我正確理解您的代碼,如果extras.getString(“team1name”)不存在,則會發生Nullpointer異常。 在調用getAcronym之前,您應該調試Project並確認team1name變量是否使用字符串設置。

(您是否正確定義了變量?String team1name =“”代碼中的任何位置?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM