获取android.content.res.Resources $ NotFoundException:即使资源存在于android中,异常


89

请让我知道我要去哪里出错了。

我正在创建一个应用程序,该应用程序的活动之一只能在横向模式下进行。所以我在AndroidManifest.xml文件中添加了以下内容

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

我已经创建了一个文件夹

/ res / layout-land

并在其中添加名为see_today_landscape_layout的布局。

onCreate()我添加以下内容

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

但是,当我运行我的应用程序时,出现以下错误

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

我在R.java中交叉检查,它具有ID 7f03002b的资源,该资源正在寻找异常并且它存在于此...

我清理并重建项目说了5次,但是仍然出现问题。

奇怪的是,这在昨天有效,而今天却无效。代码是一样的。


资源ID#0x7f03002b指的是什么?您应该提供see_today_landscape_layout.xml文件的内容。
a.ch.

是它指的see_today_landscape_layout.xml按照R.java


我有这个问题,当升级到使用compile 'com.android.support:appcompat-v7:23.4.0',如果我留在v7:22.2.0'它的工作原理
斯蒂芬

Answers:


36
  1. 在日食中,转到“项目”>“清理...”
  2. 选择您的项目,然后按确定
  3. 重新启动应用

如果再次发生,请删除r.java文件。它会自动生成。


2
正如我之前提到的...我确实清除了bin和gen文件夹并重建了应用程序..仍然无法正常工作...
Nik

128
如果这不能解决您的问题,为什么会出现复选标记?
IcedD​​ante 2014年

1
如果在发布应用程序上发生这种情况,您该怎么办?
Dinesh

220

对于我的情况,原因是采用的int参数TextView。让我举一个例子

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

获取上面的错误信息。

可以通过转换intString这样来解决

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

在编写时int,它期望的是资源而不是正在编写的文本。所以,要小心在设定的int作为StringAndroid中。


谢谢,它起作用了,我正在尝试这样做:num2.setText(lotteryCharacters.charAt(2));,然后我更改为num2.setText(String.valueOf(lotteryCharacters.charAt(2))); ...而且有效!
TharakaNirmana 2013年

1
我想知道valueOf(i)和“” + i之间有什么区别?
彼得

完全出乎意料,好极了!谢谢
gunjot singh

1
XAML代码如何,如何设置值。我的情况是应为XAML上的属性设置十进制值
zquanghoangz

2
谢谢,原因是setText是接受String和资源ID的重载方法。然后,您传递一个int,它会寻找资源ID
abedfar '17

12

由于您是在明确地设置布局,因此您可能希望尝试将其放置在默认的/ layout文件夹中,而不是在/ layout-land中,因为这是如果您希望Android为您自动处理旋转。


1
如果手机处于纵向视图,则它将处于纵向,而旋转手机时,它将处于横向。您是否正在尝试使其始终保持风景?然后,你需要做的是设置活动的方向为横向的清单文件或代码什么看这个问题stackoverflow.com/questions/2150287/...
mbwasi

正如我在问题“ <activity android:name =“。LandScapeImageActivity” android:screenOrientation =“ landscape”> </ activity>中提到的那样,我已经这样做了
Nik

1
您缺少configchanges部分<activity android:screenOrientation =“ landscape” android:configChanges =“ orientation | keyboardHidden” android:name =“ abcActivty” />
mbwasi 2012年


2

之所以会发生这种情况,是因为电话中的语言不同,而您的代码没有针对该语言的资产。例如,您的preference.xml放在xml-en中,而您尝试在选择法语的电话中运行应用程序,则该应用程序将崩溃。


始终创建默认资产文件夹,然后添加特定于语言或方向的文件夹。尽管这里可能是这样,也可能不是这样:)
艾哈迈德·阿里·纳西尔

2

我从另一个原因收到此错误:

我有文件,res/xml/data.xml并且试图用这样的Resources类加载它:

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

但是,这是不正确的,因为该方法Resources.getSystem()返回一个全局共享资源对象,该对象仅提供对系统资源的访问。

正确的方法如下所示(从Activity内部):

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

那么如何从顶级函数或不从Activity继承的类访问资源?
Vivek Yadav

2

在我的情况下,我的build.gradle中用于应用模块的Build Tools版本在旧项目上已经过时。更新它可以解决此问题:

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

更新到最新的构建工具版本(25.0.1)并同步了项目,一切都恢复了。



1

我删除build了项目内的文件夹。清理后在Android Studio中重新构建。然后更正了build.gradle和AndroidManifest中的错误。


1

这也可能导致一些麻烦:偶然地,我的布局之一停在了我的平板电脑资源文件夹中,因此我仅在手机布局中出现此错误。电话布局根本没有合适的布局文件。

在将布局文件移动到正确的标准文件夹中并进行了以下项目重建之后,我再次工作。


您能否提供更多有关此的信息,请stackoverflow.com/help/how-to-answer
Rich Benner

0

确保您指向的R是正确的R。我有一个非常类似于此的问题,Eclipse插入了一个导入,该导入指向System R文件而不是项目R。花了很多头挠头。希望这可以帮助。


0

您已在XML中将屏幕方向设置为横向。如果您使用了eclipse来生成该文件,那么它将在res / layout-land /文件夹下创建。但是当您在Portrait模式下打开活动时,应用程序会在res / layout-port /文件夹或常规res / layout /中搜索xml。 。如果您没有用于纵向模式的xml,则应用程序将崩溃。


0

我已经通过这种方式修复了:

在资源目录名称中创建一个文件夹,"drawable-nodpi"然后将其他目录中的所有资源从其他可绘制目录中移出。

现在清理您的项目,然后重新构建。希望再次运行,这次可以正常运行,没有发现任何资源异常。


这向我指出了正确的轨道,但请记住这个帖子:stackoverflow.com/questions/24682094/...
阿德里安

0

当我尝试通过使用getInt(“ ID”)从一个意图访问捆绑数据时,出现此错误。

我通过使用getString(“ ID”)解决了它。

我从Activity1获得

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

在活动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
请更新您的答案,以说明这是如何解决问题的,并改进了这个已有5年历史的问题,已通过投票并接受了这些答案。请参阅:如何写一个好的答案
FluffyKitten

请考虑添加一些详细信息和解释以支持您的回答,以便对他人有所帮助
Souvik Ghosh

0

对我而言,缓存失效和重新启动均无效。我删除了.idea和.gradle文件夹。如果这样做,请不要忘记构建日志之类的东西,或者可能会消失的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.