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

时间:2012-06-29 10:30:14

标签: java android

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

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

主要活动开始后,按主页键设置应用程序,然后终止我的应用程序。

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

例如,我立即尝试设置文本视图的文本,如下所示:

((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中注意到,就在此活动的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>

3 个答案:

答案 0 :(得分:13)

我有同样的问题而且它给了我

DexOpt: couldn't find static field

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

答案 1 :(得分:0)

我想我也看到了这个问题。你在引用一个图书馆项目吗?如果是这样,可能会丢失来自R.java的静态,因为Eclipse在将R.java从另一个库导入项目时将其删除。

请参阅:https://stackoverflow.com/a/26791329/1748628

答案 2 :(得分:-1)

//Have you Define this line in your oncreat method

      setcontentview(R.layout.yourlayout);

 // clen code then run again.