java - 进程被终止后 R.java 中的 Android NoSuchField 错误

标签 java android

我的一个应用遇到了一个非常令人沮丧的问题。

我有一个闪屏 Activity ,它为我的应用加载一些初始数据,然后启动主要 Activity 并自行完成。

主要 Activity 运行后,我通过按主页键让应用程序后台运行,然后终止我的应用程序的进程。

当我重新启动我的应用程序时,启动画面尝试运行但在我尝试访问我的 R.java 文件中的任何字段时失败:

例如,我立即尝试像这样设置 TextView 的文本:

((TextView)findViewById(R.id.splash_tv_1)).setText(application.getLanguage().pleasewait);

这会引发以下异常:

06-29 11:18:14.661: ERROR/AndroidRuntime(21427): java.lang.NoSuchFieldError: com.pagesuite.android.reader.framework.R$id.splash_tv_1

然后当我再次启动它时就没问题了。

如果我使用 TaskKiller 工具终止应用程序(我怀疑很多用户会天真地使用它)或者如果操作系统终止我的进程,我会得到相同的行为。

有什么想法吗?

编辑:

刚刚在 logcat 中注意到,就在该 Activity 的 onCreate() 执行之前,记录了以下内容:

06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1945 (splash_logo) in Lcom/pagesuite/android/reader/framework/R$id;
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0010 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.loadLogoImg (Lcom/pagesuite/android/reader/framework/xml/appsettings/PS_AppSettings;)V
06-29 11:18:14.571: DEBUG/dalvikvm(21427): DexOpt: couldn't find static field
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1946 (splash_tv_1) in Lcom/pagesuite/android/reader/framework/R$id;
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0039 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.setLanguage ()V
06-29 11:18:14.571: DEBUG/dalvikvm(21427): DexOpt: couldn't find static field
06-29 11:18:14.571: WARN/dalvikvm(21427): VFY: unable to resolve static field 1946 (splash_tv_1) in Lcom/pagesuite/android/reader/framework/R$id;
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: replacing opcode 0x60 at 0x0000
06-29 11:18:14.571: DEBUG/dalvikvm(21427): VFY: dead code 0x0002-0020 in Lcom/pagesuite/android/reader/framework/activities/PS_Splashscreen;.setTextColors ()V

这是我在类里面尝试访问 R.id 的三个实例。

要注意的一件事是我调用:

setContentView(R.layout.ps_splashscreen);

这条线似乎运行良好,所以似乎缺少 R.id。

编辑: 这是布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:orientation="vertical" 
    android:gravity="center">

    <ImageView
        android:id="@+id/splash_logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <TextView
        android:id="@+id/splash_tv_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Please wait"
        android:textColor="@color/white"
        android:textSize="20dip" />

    <TextView
           android:id="@+id/splash_tv_2"
        android:layout_marginTop="20dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Loading..."
        android:textColor="@color/white" />

</LinearLayout>

最佳答案

我遇到了同样的问题,它给了我

DexOpt: couldn't find static field

错误,因为我有两个同名的布局 xml 文件,一个在外部库中,一个在项目中。我不知道这对其他人是否有用:)

关于java - 进程被终止后 R.java 中的 Android NoSuchField 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11260176/

相关文章:

java - 无法使用gradle构建

java - 我的 android 应用程序安装在 SD 卡或内部手机存储上吗

java - 如何在java中创建自定义数据类型?

java - 使用Weka将文件拆分为测试文件和训练文件

android - 使用约束布局将两个项目一起居中

android - 如何将 TextView 限制为整行

java - 在主从配置中使用 Spring @EnableRedisHttpSession

android - greenDao 获取自增ID

c# - 来自 REST 的 Xamarin 图像

android - 在 CLI 上运行 cordova build 命令时出现 Gradle 2.2.1 错误