[英]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.