2014-02-21 24 views
0

我將白標記爲我的應用程序。爲此,我已經:Android庫在擴展應用程序類上的項目投射錯誤

  • 將我的Android應用程序項目轉換爲Android庫項目。我們將其稱爲com.mylibraryproject.app
  • 創建一個新項目。我們將其稱爲com.example.testproject
  • 將我的Android庫項目添加爲我的新Android應用程序項目庫。
  • 將我Android庫項目中的清單複製到我的新Android應用程序項目的清單中,並適當引用了活動。

例子:

<activity 
     android:name="com.mylibraryproject.app.activity.MyActivity" 
     android:screenOrientation="portrait" > 
</activity> 

不過,我有一個崩潰我的新的Android應用程序項目運行時。

庫項目包含一個類,我們將其稱爲MyApp,它擴展了Application。在這個項目中,都有對(MyApp)getApplicationContext()的引用。

當上面的命中時,下面的異常被拋出。我如何避免這種情況?

更新:

以下是完整的onResume()方法和日誌貓:

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApp app = (MyApp)getApplication(); 
    if (app.getUserId() == -1 && !app.getUserConnected() && app.loadLastUser()) { 
     updateDisplay(); 
    } else if (!mBack && app.getUserConnected()) { 
     updateDisplay(); 
    } 
} 

這裏是例外

02-21 13:13:11.169: E/AndroidRuntime(469): FATAL EXCEPTION: main 
02-21 13:13:11.169: E/AndroidRuntime(469): java.lang.RuntimeException: Unable to resume activity {com.example.testproject/com.mylibraryproject.app.activity.MyActivity}: java.lang.ClassCastException: android.app.Application 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1668) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.os.Looper.loop(Looper.java:130) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-21 13:13:11.169: E/AndroidRuntime(469): at java.lang.reflect.Method.invokeNative(Native Method) 
02-21 13:13:11.169: E/AndroidRuntime(469): at java.lang.reflect.Method.invoke(Method.java:507) 
02-21 13:13:11.169: E/AndroidRuntime(469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
02-21 13:13:11.169: E/AndroidRuntime(469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
02-21 13:13:11.169: E/AndroidRuntime(469): at dalvik.system.NativeStart.main(Native Method) 
02-21 13:13:11.169: E/AndroidRuntime(469): Caused by: java.lang.ClassCastException: android.app.Application 
02-21 13:13:11.169: E/AndroidRuntime(469): at com.mylibraryproject.app.activity.MyActivity.onResume(MyActivity.java:277) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.Activity.performResume(Activity.java:3832) 
02-21 13:13:11.169: E/AndroidRuntime(469): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2110) 
02-21 13:13:11.169: E/AndroidRuntime(469): ... 12 more 

277行是這一行:

MyApp app = (MyApp)getApplication(); 

回答

2

Application an ApplicationContext不是一回事。您需要投下getApplication()結果,而不是

當然,鑄造只是說,「我知道這個目標是一個XYZ所以讓我把它看作是」 ...它實際上並沒有蛻變一個對象到另一個鍵入

編輯:

更改您的onResume像下面

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApp app = (MyApp)getApplication(); 
    if (app.getUserId() == -1 && !app.getUserConnected() && app.loadLastUser()) { 
     updateDisplay(); 
    } else if (!mBack && app.getUserConnected()) { 
     updateDisplay(); 
    } 
} 

<application android:name="com.mypackage.MyApp" 
    ....> 
+0

我已經更新了從問題的行'(MyApp的)getApplicationContext()'來'(MyApp)getApplication()',我仍然收到相同的異常。 – Andrew

+0

那麼是時候發佈你的堆棧跟蹤了。你發佈的是一個症狀,整個堆棧將顯示原因(可能甚至說'造成')。同時提供您的'onResume'方法,因爲當前的例外意味着您的問題所在的位置 –

+0

我已更新原始帖子。 – Andrew

相關問題