这与标题为Android Resource not found exception
的问题不重复。
我的应用中有一个回收站视图。我在卡片视图中有几个按钮,当点击按钮时,我会获得与每张卡片相关联的唯一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 :(得分:1)
makeText(..)方法正在使用方法中提供的整数ID从资源目录中查找String。
要解决此问题,请替换以下内容:
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) {
// ...
}
答案 1 :(得分:0)
如果您查看方法makeText
,那么您会注意到您正在调用Toast.makeText(context, resId, duration);
方法,该方法将String
资源ID作为第二个参数。当您使用Integer调用它时,系统将在您的strings.xml文件中查找具有该ID的字符串资源。因此,不要将字符串解析为整数,而只需在String
中显示Toast
:
public void showToast(String x){
Toast.makeText(getActivity().getApplicationContext(), x, Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:0)
toast所需的参数是:
Toast(context, String, Length(integer))
所以不要将你的字符串转换为Integer。直接在吐司中显示。
Toast.makeText(getActivity().getApplicationContext(),x,Toast.LENGTH_SHORT).show();