将String转换为Integer时未找到Android资源异常

时间:2017-02-13 15:03:54

标签: java android casting

这与标题为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。

可能导致此问题的原因是什么?我该如何解决这个问题?

3 个答案:

答案 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();