Lấy android.content.res.Resources $ NotFoundException: ngoại lệ ngay cả khi tài nguyên có trong android


89

Xin hãy cho tôi biết tôi sai ở đâu để nhận lỗi.

Tôi đang tạo một ứng dụng có một trong những hoạt động của nó chỉ ở chế độ ngang. Vì vậy, tôi đã thêm phần sau vào tệp AndroidManifest.xml

<activity android:name=".LandScapeImageActivity" android:screenOrientation="landscape"></activity>

Tôi đã tạo một thư mục như

/ res / layout-land

và thêm một bố cục có tên see_today_landscape_layout trong đó.

và trong onCreate()tôi đã thêm những thứ sau

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.see_today_landscape_layout);
....
}

Nhưng khi tôi chạy ứng dụng của mình, tôi gặp lỗi sau

02-06 13:46:14.358: E/AndroidRuntime(13286): FATAL EXCEPTION: main
02-06 13:46:14.358: E/AndroidRuntime(13286): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mid.kew.activities/com.mid.kew.activities.LandScapeImageActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f03002b
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4066)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.access$2400(ActivityThread.java:135)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2140)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.os.Looper.loop(Looper.java:144)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.main(ActivityThread.java:4937)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at java.lang.reflect.Method.invokeNative(Native Method)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at java.lang.reflect.Method.invoke(Method.java:521)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at dalvik.system.NativeStart.main(Native Method)
02-06 13:46:14.358: E/AndroidRuntime(13286): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f03002b
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.getValue(Resources.java:892)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1869)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.getLayout(Resources.java:731)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.Activity.setContentView(Activity.java:1654)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.mid.kew.activities.LandScapeImageActivity.onCreate(LandScapeImageActivity.java:103)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
02-06 13:46:14.358: E/AndroidRuntime(13286):    ... 12 more

Tôi đã vượt qua kiểm tra trong R.java và nó có tài nguyên với ID 7f03002b mà ngoại lệ đang tìm kiếm và nó hiện diện trong đó ...

Tôi đã làm sạch và xây dựng lại dự án 5 lần, nhưng sự cố vẫn xảy ra.

Điểm kỳ lạ là điều này đã hoạt động ngày hôm qua và nó không hoạt động hôm nay. Mã giống nhau.


ID tài nguyên # 0x7f03002b đề cập đến điều gì? Bạn nên cung cấp nội dung của see_today_landscape_layout.xmltệp.
a.ch.

vâng, nó tham khảo để xem_today_landscape_layout.xml theo R.java
Nik


Tôi đã gặp sự cố này khi nâng cấp để sử dụng compile 'com.android.support:appcompat-v7:23.4.0'nếu tôi vẫn v7:22.2.0'hoạt động với nó
stephen

Câu trả lời:


36
  1. trong nhật thực, đi tới Dự án> Làm sạch ...
  2. chọn dự án của bạn, sau đó nhấn OK
  3. khởi chạy lại ứng dụng

nếu nó xảy ra một lần nữa, hãy xóa tệp r.java. nó sẽ tự động tạo ra.


2
như tôi đã đề cập trước đây ... Tôi đã xóa các thư mục bin và gen và xây dựng lại ứng dụng .. vẫn không hoạt động ...
Nik

128
Nếu điều này không khắc phục được sự cố của bạn, tại sao nó lại có dấu kiểm?
IcedDante

1
bạn làm gì nếu điều này xảy ra trên ứng dụng phát hành?
Dinesh

220

Đối với tình trạng của tôi, nguyên nhân là tham intsố TextView. Hãy để tôi cho một ví dụ

int i = 5;
myTextView.setText(i);

nhận được thông tin lỗi ở trên.

Điều này có thể được khắc phục bằng cách chuyển đổi intthành Stringnhư thế này

myTextView.setText(String.valueOf(i));

Khi bạn viết int, nó mong đợi một tài nguyên không phải là văn bản mà bạn đang viết. Vì vậy, hãy cẩn thận khi đặt intlàm Stringtrong Android.


Cảm ơn, nó đã hoạt động, tôi đang cố gắng làm như thế này: num2.setText (xổ sốCharacters.charAt (2)) ;, sau đó tôi thay đổi thành num2.setText (String.valueOf (xổ sốCharacters.charAt (2))); ... va no đa hoạt động!
TharakaNirmana

1
Tôi tự hỏi sự khác biệt giữa valueOf (i) và "" + i là gì?
peterb

Hoàn toàn bất ngờ, Bắt tuyệt vời! Cảm ơn
gunjot singh

1
Làm thế nào về mã XAML, làm thế nào tôi có thể đặt giá trị. Trường hợp của tôi là nên đặt giá trị thập phân cho tài sản trên XAML
zquanghoangz

2
Cảm ơn, lý do là setText là phương thức quá tải chấp nhận cả Chuỗi và Id tài nguyên. Sau đó, bạn vượt qua một int nó trông cho Id tài nguyên
abedfar

12

Vì bạn đang thiết lập bố cục một cách rõ ràng, bạn có thể muốn thử và đặt nó vào thư mục mặc định / layout không phải trong / layout-land vì đó là nếu bạn muốn Android tự động xử lý xoay cho bạn.


1
Nếu điện thoại ở chế độ xem dọc, điện thoại sẽ ở chế độ dọc, khi bạn xoay điện thoại, điện thoại sẽ ở chế độ ngang. Bạn đang cố gắng làm cho nó luôn có phong cảnh? Sau đó, những gì bạn cần làm là đặt hướng của hoạt động thành ngang trong tệp Tệp kê khai hoặc trong mã xem Câu hỏi này stackoverflow.com/questions/2150287/…
mbwasi

Tôi đã làm điều đó như tôi đã đề cập trong câu hỏi của tôi '<activity android: name = android: screenOrientation = "cảnh quan" "LandScapeImageActivity."> </ Activity>'
Nik

1
bạn đang thiếu phần thay đổi cấu hình <activity android: screenOrientation = "Landscape" android: configChanges = "direction | keyboardHidden" android: name = "abcActivty" />
mbwasi

9

Thử di chuyển xml bố cục của bạn từ res/layout-landsang res/layoutthư mục


vào thư mục bố trí?
Robert

1
từ res / layout-đất >> res / layout thư mục
Ashish Kumar

Cũng đã xảy ra với tôi nhiều lần
Markos Evlogimenos

Tôi chuyển xml của tôi từ res/layout-sw600dpđể res/layoutsau đó nó đã làm việc .. Cảm ơn bạn đã ans của bạn ..
Shailendra Madda

2

Điều này có thể xảy ra do một ngôn ngữ khác trong điện thoại mà mã của bạn không có nội dung. Ví dụ: tùy chọn của bạn .xml được đặt trong xml-en và bạn đang cố chạy ứng dụng của mình trên điện thoại đã chọn tiếng Pháp, ứng dụng sẽ bị lỗi.


Luôn tạo các thư mục nội dung mặc định và sau đó thêm các thư mục định hướng hoặc ngôn ngữ cụ thể. Mặc dù sức mạnh này hoặc có thể không phải là trường hợp trên đây :)
Ahmad Ali Nasir

2

Tôi gặp lỗi này do một lý do khác:

Tôi đã có tệp res/xml/data.xmlvà tôi đang cố tải nó bằng Resourceslớp như thế này:

Resources.getSystem().getXml(R.xml.data);

Tuy nhiên, điều này không chính xác vì phương thức Resources.getSystem()trả về một đối tượng Tài nguyên được chia sẻ toàn cầu cung cấp quyền truy cập chỉ vào tài nguyên hệ thống.

Cách chính xác như sau (từ bên trong Hoạt động):

this.getResources().getXml(R.xml.data);

Sau đó, làm cách nào để truy cập tài nguyên từ các hàm cấp cao nhất hoặc các lớp không kế thừa từ Activity?
Vivek Yadav

2

Trong trường hợp của tôi, phiên bản Công cụ xây dựng trong build.gradle của tôi dành cho mô-đun ứng dụng đã lỗi thời trên một dự án cũ. Cập nhật nó đã khắc phục sự cố:

android {
    ...
    buildToolsVersion "19.0.1"
    ...

Đã cập nhật lên phiên bản công cụ xây dựng mới nhất (25.0.1) và đồng bộ hóa dự án và tất cả đều hoạt động tốt trở lại.


2

Kiểm tra để đảm bảo rằng hàng nhập khẩu của bạn là chính xác. Tôi đã gặp sự cố tương tự khi Rtrỏ đến Rtệp hệ thống Android , không phải tệp cục bộ của tôi.


1

Tôi đã xóa các thư mục buildbên trong một dự án. Sau khi làm sạch và xây dựng lại nó trong Android Studio. Sau đó sửa lỗi trong build.gradle và AndroidManifest.


1

Điều này cũng có thể gây ra một số rắc rối: Vô tình một trong các bố cục của tôi đã được đưa vào thư mục tài nguyên máy tính bảng của tôi, vì vậy tôi chỉ gặp lỗi này với bố cục điện thoại. Bố cục điện thoại đơn giản là không có tệp bố cục phù hợp.

Tôi đã làm việc lại sau khi di chuyển tệp bố cục vào đúng thư mục tiêu chuẩn và xây dựng lại dự án sau.


Bạn có thể cung cấp thêm thông tin về vấn đề này, vui lòng stackoverflow.com/help/how-to-answer
Rich Benner

0

Đảm bảo rằng chữ R bạn đang trỏ là đúng. Tôi đã gặp sự cố tương tự như điều này, trong đó một bản nhập được chèn bởi Eclipse trỏ đến tệp System R chứ không phải tệp dự án. Phải vò đầu bứt tai. Hi vọng điêu nay co ich.


0

Bạn đã đặt hướng màn hình thành ngang trong xml của mình. Nếu bạn đã sử dụng eclipse để tạo tệp này, nó sẽ được tạo trong thư mục res / layout-land / Nhưng khi bạn mở hoạt động ở chế độ Portrait, ứng dụng sẽ tìm kiếm xml trong thư mục res / layout-port / hoặc res / layout / thông thường . Nếu bạn không có xml cho chế độ dọc, ứng dụng của bạn sẽ bị treo.


0

Tôi đã sửa theo cách này:

Tạo một thư mục trong tên thư mục tài nguyên của bạn "drawable-nodpi"và sau đó di chuyển tất cả tài nguyên của bạn trong thư mục này từ thư mục có thể vẽ khác.

Bây giờ làm sạch dự án của bạn và sau đó xây dựng lại. Chạy lại hy vọng nó sẽ hoạt động lần này mà không có bất kỳ tài nguyên nào không tìm thấy ngoại lệ.


Điều này đã chỉ cho tôi đi đúng hướng nhưng hãy ghi nhớ bài đăng này: stackoverflow.com/questions/24682094/…
Adrian

0

Tôi gặp lỗi này khi cố gắng truy cập dữ liệu Gói từ One Intent bằng cách sử dụng getInt ("ID").

Tôi đã giải quyết nó bằng cách sử dụng getString ("ID").

Từ Activity1 tôi đã có

Intent intent=new Intent(this,ActivityB.class);
intent.putExtra("data",data)// 
startActivity(intent);

Trên Hoạt động B,

Bundle bundle=getIntent().getExtras();
if(extras!=null){
// int x=extras.getInt("Data"); This Line gave me error int 
x=Integer.parseInt(extras.getString("Data")); // This solved the problem.
}

1
Vui lòng cập nhật câu trả lời của bạn để giải thích cách điều này giải quyết vấn đề và cải thiện câu trả lời được ủng hộ và chấp nhận mà câu hỏi 5 tuổi này đã có. Xem: Làm thế nào để tôi viết một câu trả lời tốt .
FluffyKitten

Hãy cân nhắc thêm một số chi tiết và giải thích để hỗ trợ câu trả lời của bạn để nó có ích cho người khác
Souvik Ghosh

0

Đối với tôi, việc vô hiệu hóa bộ nhớ cache và khởi động lại không hoạt động. Tôi đã xóa các thư mục .idea và .gradle. Nếu bạn làm điều đó, đừng quên rằng những thứ như bản ghi xây dựng hoặc thứ gì đó có thể biến mất.

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.