0

team1nameは、ウィジェットクラスの先頭で初期化されます

文字列team1name=null;

しかし、から文字列を返し、getAcronym()team1nameに割り当てると、nullポインタ例外が発生します。これを解決するにはどうすればよいですか?コードは次のとおりです

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)メソッドはnullチェックを行いません。次の行を追加します。

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

文字列値のチェックを開始する前に、これで問題が軽減されるはずです。

teamNameがnullとして渡される理由を確認するための作業である可能性があります。意図的なものである場合、このソリューションは正常に機能します。常に有効なteamNameを送信する必要がある場合は、ウィジェットに到達する前に、コードのどこかに適切に割り当てられていない場所があります。

また、文字列が一定でない場合、つまり「England」または「england」である可能性がある場合は、大文字と小文字を区別せずに比較して、これらのインスタンスをキャッチする必要があります。

すなわち

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

Bundle#getString(String key)nullマッピングが見つからない場合に戻ります。ドキュメントを参照してください。

チェックnullインgetAcronym(String teamName)する代わりに、マッピングが見つからない場合にデフォルト値を設定できる方法を使用することもできます。 getString(String key, String defaultValue)例えば:

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

String内の比較でgetAcronym(String teamName)は、nullpointerを回避するために比較を逆にすることもできます。これは、次のことを始めるのに良い習慣です。

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

私があなたのコードを正しく理解している場合、extras.getString( "team1name")が存在しないと、NullpointerExceptionが発生します。getAcronymを呼び出す前に、プロジェクトをデバッグし、team1name変数が文字列で設定されていることを確認する必要があります。

(変数を適切に定義しましたか?String team1name = ""コード内のどこかにありますか?)

于 2012-09-13T09:06:31.497 に答える