【问题标题】:android.content.res.Resources$NotFoundException: String resource ID #0x0android.content.res.Resources$NotFoundException:字符串资源 ID #0x0
【发布时间】:2019-08-16 16:04:05
【问题描述】:

我正在开发一个从 MySQL 数据库读取数据的 Android 应用程序,我遇到了这个错误。我有这个 XML 布局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 


        <TextView android:id="@+id/wardNumber" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:layout_marginLeft="3dp" 
            android:text="Ward Number" 
            android:textSize="22dp"/> 


        <TextView android:id="@+id/dateTime" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:layout_below="@id/wardNumber" 
            android:layout_alignParentRight="true" 
            android:layout_marginRight="3dp" 
            android:text="Date-Time" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/dateTime"
            android:layout_alignBottom="@+id/dateTime"
            android:layout_alignLeft="@+id/wardNumber"
            android:layout_marginLeft="3dp" 
            android:text="Name" />

</RelativeLayout> 

这是我的 Java 文件:

public ApplicationAdapter(Context context, List<Application> items) {
    super(context, R.layout.app_custom_list, items);
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if(v == null) {
        LayoutInflater li = LayoutInflater.from(getContext());
        v = li.inflate(R.layout.app_custom_list, null);            
    }

    Application app = items.get(position);

    if(app != null) {
      //  ImageView icon = (ImageView)v.findViewById(R.id.appIcon);
        TextView wardNumber = (TextView)v.findViewById(R.id.wardNumber);
        TextView name = (TextView)v.findViewById(R.id.name);
      //  LinearLayout ratingCntr = (LinearLayout)v.findViewById(R.id.ratingCntr);
        TextView dateTime = (TextView)v.findViewById(R.id.dateTime);

  //      if(icon != null) {
  //          Resources res = getContext().getResources();
   //         String sIcon = "com.sj.jsondemo:drawable/" + app.getIcon();
   //         icon.setImageDrawable(res.getDrawable(res.getIdentifier(sIcon, null, null)));
   //     }

        if(wardNumber != null) wardNumber.setText(app.getTitle());

        if(name != null) name.setText(app.getTitle());

        if(dateTime != null) {
            dateTime.setText(app.getTotalDl());
          //  NumberFormat nf = NumberFormat.getNumberInstance();
          //  dateTime.setText(nf.format(app.getTotalDl())+" dl");            
        }


    }

    return v;
}
}

调用此 Activity 时,我收到以下错误消息:

11-24 21:12:03.633:  E/AndroidRuntime(1251):  FATAL EXCEPTION: main
11-24 21:12:03.633:  E/AndroidRuntime(1251): android.content.res.Resources$NotFoundException: String resource ID #0x0
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.content.res.Resources.getText(Resources.java:201)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.TextView.setText(TextView.java:2863)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at com.sj.jsondemo.Appl icationAdapter.getView(ApplicationAdapter.java:53)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.AbsListView.obtainView(AbsListView.java:1430)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.ListView.onMeasure(ListView.java:1127)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.View.measure(View.java:8313)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:701)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:311)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.View.measure(View.java:8313)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.View.measure(View.java:8313)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
11-24 21:12:03.633: E/AndroidRuntime(1251):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.View.measure(View.java:8313)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at  android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.View.measure(View.java:8313)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.os.Looper.loop(Looper.java:130)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at android.app.ActivityThread.main(ActivityThread.java:3683)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at java.lang.reflect.Method.invokeNative(Native Method)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at java.lang.reflect.Method.invoke(Method.java:507)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-24 21:12:03.633:  E/AndroidRuntime(1251):    at dalvik.system.NativeStart.main(Native Method)
11-24 21:12:08.922: I/Process(1251): Sending signal. PID: 1251 SIG: 9

我不知道如何解决这个错误。

【问题讨论】:

    标签: java android xml listview


    【解决方案1】:

    改变

    dateTime.setText(app.getTotalDl());
    

    dateTime.setText(String.valueOf(app.getTotalDl()));
    

    setText 有不同的版本 - 一种采用 String,另一种采用 int 资源 id。如果您将整数传递给它,它将尝试查找相应的字符串资源 id - 它无法找到,这是您的错误。

    我猜app.getTotalDl() 返回一个整数。您需要专门告诉setText 将其设置为此int 的String 值。

    setText (int resid) setText (CharSequence text)

    【讨论】:

    • setText(int resId) 甚至没有附加 javadoc。他们真的应该给它一个单独的名字——这显然是一个常见的误用。那么,指定 resId 会将 TextView 的文本设置为另一个资源的文本?
    • 我已经知道了,但我总是忘记这一点,总是以这个答案结束
    【解决方案2】:

    替换

    dateTime.setText(app.getTotalDl());
    

    dateTime.setText(""+app.getTotalDl());
    

    【讨论】:

    • 这是工作,但我认为这不是合适的方式。 @KenWolf 的答案是正确和专业的方式。
    【解决方案3】:

    如果我们将值设为int 并将其设置为String,则会发生错误。 PFB 我的解决方案,

    Textview = tv_property_count;
    int property_id;
    tv_property_count.setText(String.valueOf(property_id));
    

    【讨论】:

      【解决方案4】:

      如果你得到 int 中的值,你必须使用字符串,因为它会抛出错误

      之前

        holder.villageName.setText(villageModelList.get(position).getVillageName());
          holder.villageCount.setText(villageModelList.get(position).getPeopleCount());
          holder.peopleCount.setText(villageModelList.get(position).getPeopleCount());
      

      之后

        holder.villageName.setText(villageModelList.get(position).getVillageName());
          holder.villageCount.setText(String.valueOf(villageModelList.get(position).getPeopleCount()));
          holder.peopleCount.setText(String.valueOf(villageModelList.get(position).getPeopleCount()));
      

      您可以通过添加 String.valueOf

      来解决错误

      【讨论】:

        【解决方案5】:

        当您尝试在 Edittexttextview 中设置文本时,您 应该只传递字符串格式。

        dateTime.setText(app.getTotalDl());
        

        dateTime.setText(String.valueOf(app.getTotalDl()));
        

        【讨论】:

          【解决方案6】:

          settext 的评估值为整数,因此它会查看附加的资源但未找到,您想设置文本使其应为字符串,因此通过附加 .toStringeString.valueOf(int) 将整数转换为字符串会解决你的问题!

          【讨论】:

            【解决方案7】:

            你可以做到。这是一个简单的方法。

            txtTopicNo.setText(10+"");
            

            【讨论】:

              【解决方案8】:

              如果您使用的是 Kotlin

              dateTime.setText(
                  app.getTotalDl().toString()
              )
              

              如果问题仍然存在并且您正在使用data binding 以防万一,请重新检查您的android:text 属性。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2023-01-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-06-27
                • 2020-02-28
                相关资源
                最近更新 更多