获取android.content.res.Resources $ NotFoundException:即使在android中存在资源时也是异常

时间:2012-02-06 14:14:50

标签: android exception layout resources landscape

请告诉我出错的地方。

我正在创建一个应用程序,其活动之一仅在横向模式下。所以我在 AndroidManifest.xml 文件

中添加了以下内容
<activity android:name=".LandScapeImageActivity" android:screenOrientation="landscape"></activity>

我创建了一个像

这样的文件夹
  

/ RES /布局陆

并在其中添加名为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为异常的ID为7f03002b的资源,它存在于那里......

我清理并重建项目5次,但问题仍然存在。

奇怪的一点是,这在昨天工作,今天不起作用。代码是一样的。

18 个答案:

答案 0 :(得分:198)

对于我的情况,原因是int的{​​{1}}参数。让我举个例子

TextView

获取上面的错误信息。

可以通过将int i = 5; myTextView.setText(i); 转换为int来解决此问题

String

当您编写myTextView.setText(String.valueOf(i)); 时,它期望资源不是您正在编写的文本。因此,请注意在Android中将int设置为int

答案 1 :(得分:37)

  1. 在eclipse中,转到Project&gt;清洁...
  2. 选择您的项目,然后按确定
  3. 重新启动应用
  4. 如果再次发生,请删除r.java文件。它会自动生成。

答案 2 :(得分:11)

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

答案 3 :(得分:8)

尝试将布局xml从res/layout-land移动到res/layout文件夹

答案 4 :(得分:2)

检查以确保您的导入正确无误。我有一个类似的问题,R指向Android系统R文件,而不是我的本地文件。

答案 5 :(得分:2)

这可能是由于手机中的语言不同而您的代码没有资产。例如,您的preference.xml位于xml-en中,并且您尝试在选择了法语的手机中运行您的应用程序,该应用程序将崩溃。

答案 6 :(得分:2)

在我的情况下,我的build.gradle中的应用程序模块的Build Tools版本在旧项目上已经过时了。更新它修复了问题:

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

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

答案 7 :(得分:1)

我刚刚在 Android 6 上收到此错误。 我将所有 drawable 从 drawable-v24 移动到 drawable 文件夹,错误终于消失了。

答案 8 :(得分:1)

即使已经接受了答案,但我有不同的答案。当您分配一些文本进行查看时,通常会发生这种情况。例如。

currectText.setText(progress);

但如果参数不是字符串,它会给你

android.content.res.Resources$NotFoundException: String resource ID 

所以将参数设为字符串。只需使用&#39; +&#39;运营商

currectText.setText(""+progress);
  

我在刚刚转换为字符串问题解决方法的setText方法中传递int

第二个选项Integer

currectText.setText(String.valueOf(progress));

答案 9 :(得分:1)

这也会造成一些麻烦: 不小心我的一个布局被停放在我的平板电脑资源文件夹中,所以我只有手机布局才会出现此错误。手机布局根本没有合适的布局文件。

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

答案 10 :(得分:1)

我从另一个原因得到了这个错误:

我有文件res/xml/data.xml,我试图用Resources类加载它,如下所示:

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

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

正确的方法如下(来自活动内部):

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

确保您指向的R是正确的。我遇到了一个非常类似的问题,Eclipse导入的一个导入指向System R文件而不是项目文件。它花了很多头。希望这会有所帮助。

答案 14 :(得分:0)

当我尝试使用getInt(“ID”)从One Intent访问Bundle数据时出现此错误。

我使用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.
}

答案 15 :(得分:0)

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

答案 16 :(得分:0)

Eclipse:项目&gt;清洁

为我工作。当我将其他应用程序的布局复制到新应用程序时,我经常会这样做。

烦。

答案 17 :(得分:-1)

我已经通过这种方式解决了这个问题:

在资源目录名PGPASSWORD=<password> psql -h <host> -d <db> -U <user> -p 5439-a -c "select * from <table>" -F '<delimiter>' -o temp.csv 中创建一个文件夹,然后将此目录中的所有资源从其他可绘制目录中移出。

现在清理您的项目,然后重建。希望它能再次运行,这次没有任何资源未找到异常。