2012-06-29 54 views
4

我的一個應用程序遇到了一個非常令人沮喪的問題。在進程被終止後,R.java引發的Android NoSuchField錯誤

我有一個splashscreen活動,爲我的應用程序加載一些初始數據,然後啓動主要活動並完成自己。

一旦主要活動正在運行,我通過按回車鍵背景應用程序,然後終止我的應用程序。

當我重新啓動我的應用程序,濺射屏幕嘗試運行,但只要我嘗試訪問我的文件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的,只是之前的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.身份證在我的班。

有一點要注意的是,我呼籲:

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> 

+0

您可以爲您的啓動畫面發佈代碼和xml佈局嗎? –

回答

13

我有同樣的問題,它給了我

DexOpt: couldn't find static field 

錯誤,因爲我有兩個同名的佈局xml文件,一個在項目中的外部庫。我不知道這對其他人是否有用:)

+0

是的,如果我沒有記錯,這是問題。該id位於庫項目的佈局文件中,我通過在使用庫的項目中提供具有相同名稱的佈局來覆蓋佈局文件。然而,我沒有把它的Id放入我試圖找到的項目中,因此在編譯時該字段未生成,因此NoSuchField異常。 –

+0

我一直在尋找幾個小時來解決這個問題,只是這個!非常感謝你 – elbaulp

-1
//Have you Define this line in your oncreat method 

     setcontentview(R.layout.yourlayout); 

// clen code then run again. 
+0

在我的文章中說過,我曾打電話給setcontentview - 如果我沒有定義佈局,第一次如何成功運行?! –

0

我想我也看到了這個問題。你在引用一個庫項目嗎?如果是這樣,從R.java靜態可能會丟失,因爲從另一個庫中導入R.java到您的項目時,Eclipse會將其剪掉。

請參閱:https://stackoverflow.com/a/26791329/1748628

相關問題