android.content.res.Resource $ NotFoundException: ID tài nguyên chuỗi # 0x0


145

Tôi đang phát triển một ứng dụng Android đọc dữ liệu từ cơ sở dữ liệu MySQL và tôi đã gặp phải lỗi này. Tôi có bố cục XML này:

<?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> 

Và đây là tệp Java của tôi:

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;
}
}

Khi Hoạt động này được gọi, tôi nhận được thông báo lỗi này:

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

Tôi không biết làm thế nào để sửa lỗi này.

Câu trả lời:


455

Thay đổi

dateTime.setText(app.getTotalDl());

Đến

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

Có nhiều phiên bản khác nhau setText- một lấy Chuỗi và một lấy id tài nguyên int. Nếu bạn truyền cho nó một số nguyên, nó sẽ cố gắng tìm id tài nguyên chuỗi tương ứng - cái mà nó không thể tìm thấy, đó là lỗi của bạn.

Tôi đoán app.getTotalDl()trả về một int. Bạn cần nói cụ thể setTextđể đặt nó thành giá trị Chuỗi của int này.

setText (int Resid) so với setText (văn bản CharSequence)


4
setText (int resId) thậm chí không có javadoc kèm theo. Họ thực sự nên đặt cho một cái tên riêng biệt - rõ ràng là một sự lạm dụng phổ biến ở đây. Vì vậy, việc chỉ định resId đặt văn bản của TextView thành văn bản của tài nguyên khác?
Rabbi tàng hình

1
Tôi đã biết điều này, nhưng tôi luôn quên điều này và luôn kết thúc câu trả lời này
Jitendra Sawant

12

Thay thế

dateTime.setText(app.getTotalDl());

Với

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

Đó là công việc, nhưng tôi nghĩ Đó không phải là cách phù hợp. Câu trả lời @KenWolf là cách chính xác và chuyên nghiệp.
amin

1

Nếu chúng tôi nhận được giá trị như intvà chúng tôi đặt nó String, lỗi xảy ra. Giải pháp PFB của tôi,

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

0

Khi bạn cố gắng đặt văn bản trong Edittexthoặc textviewbạn chỉ nên chuyển định dạng Chuỗi.

dateTime.setText(app.getTotalDl());

đến

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

0

Giá trị được đánh giá cho giải quyết là số nguyên vì vậy nó đã đi xem một tài nguyên được đính kèm nhưng không tìm thấy, bạn muốn đặt văn bản để nó phải là chuỗi để chuyển đổi số nguyên thành chuỗi bằng cách đính kèm .toStringe hoặc String.valueOf(int)sẽ giải quyết vấn đề của bạn!



0

Nếu bạn nhận được các giá trị trong int, bạn phải sử dụng chuỗi cho rằng nó đang ném lỗi

trước

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

sau

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

bạn có thể giải quyết lỗi bằng cách thêm String.valueOf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.