2017-02-13 50 views
-2

這不是標題爲Android Resource not found exception的問題的重複。將字符串轉換爲整數時未發現Android資源異常

我在我的應用程序中有一個回收站視圖。我在卡片視圖中有幾個按鈕,當點擊按鈕時,我將獲得與每張卡片關聯的唯一ID並將其傳遞給片段中的某個函數以供進一步處理。在我的回收視圖

onClick如下:

if(v.getId() == butAccept.getId()){ 

       String x = String.valueOf(dataSet.get(getAdapterPosition()).getMeetId()); 
       Toast.makeText(v.getContext(),x,Toast.LENGTH_SHORT).show(); 
       myFrag.showToast(x); 
      } 

當該代碼執行與所述卡相關聯的唯一ID被正確地顯示在Toast

public void showToast(String x){ 
     Integer MeetId = Integer.parseInt(x); 
     Toast.makeText(getActivity().getApplicationContext(),MeetId,Toast.LENGTH_SHORT).show(); 

    } 

showToast()執行我得到一個android.content.res.Resources$NotFoundException: String resource ID #0x1錯誤。當我Toast唯一的ID沒有將其轉換爲整數我得到正確的整數。如果我在烘烤前將它轉換爲Integer,那麼我收到上面提到的錯誤。我確信getMeetId()函數返回一個Integer。

什麼可能導致此問題?我該如何解決這個問題?

+0

猜測有多少次「android.content.res.Resources $ NotFoundException:String resource ID#0x1」已經在這裏提出... – Selvin

回答

1

makeText(..)方法正在使用方法中提供的整數ID從資源目錄中查找字符串。

爲了解決這個問題,替換以下:

Toast.makeText(getActivity().getApplicationContext(), MeetId ,Toast.LENGTH_SHORT).show(); 

有了:

Toast.makeText(getActivity().getApplicationContext(), "" + MeetId ,Toast.LENGTH_SHORT).show(); 

通過查看Documentation你就會明白爲什麼會發生這種事。

使用資源ID:

public static Toast makeText(Context context, @StringRes int resId, @Duration int duration) 
          throws Resources.NotFoundException { 
    return makeText(context, context.getResources().getText(resId), duration); 
} 

使用字符串:

public static Toast makeText(Context context, CharSequence text, @Duration int duration) { 
    // ... 
} 
0

如果你看一下方法makeText,那麼你會發現,你所呼叫的Toast.makeText(context, resId, duration);方法,這需要作爲第二參數String資源ID。當你用Integer調用它時,系統將使用該ID在你的strings.xml文件中查找字符串資源。所以,不要解析字符串爲整數,但只顯示你的String,而不是在你的Toast

public void showToast(String x){ 
    Toast.makeText(getActivity().getApplicationContext(), x, Toast.LENGTH_SHORT).show(); 
} 
0

吐司所需的參數是:

Toast(context, String, Length(integer))

所以不要將您的字符串轉換爲Integer。直接顯示在烤麪包上。

Toast.makeText(getActivity().getApplicationContext(),x,Toast.LENGTH_SHORT).show();