2012-07-20 32 views
2

我試圖將我的自定義對象列表放在應用程序類中,以便在多個活動中訪問我的數據。但有些東西不起作用,我不知道發生了什麼問題。在應用程序類錯誤中保存數據

這是我在做什麼:

AssetManager assetManager = getAssets(); 
InputStream inputStream = null; 
try { 
    inputStream = assetManager.open("myJsonFile.json"); 
} catch (IOException e) { 
    Log.e("tag", e.getMessage()); 
} 
ObjectMapper objectMapper = new ObjectMapper(); 
try { 

    List<JJsonResponse> jsonResponse = objectMapper.readValue(inputStream, new TypeReference<List<JJsonResponse>>() { }); 
    Log.i("tijdlog","einde parsing"); 
    final List<JJsonResponse> myGlobalVariable = jsonResponse; 
     ((ApplicationController)getApplication()).setGlobalVariable(myGlobalVariable); 

其中JJsonResponse是一些自定義的對象。沒有最後一部分,一切正常。運行程序崩潰時

public class ApplicationController extends Application { 

    private List<JJsonResponse> venueController; 

    public List<JJsonResponse> getGlobalVariable() { 
     return venueController; 
    } 

    public void setGlobalVariable(List<JJsonResponse> globalVariable) { 
     this.venueController = globalVariable;  
    } 

    @Override 
    public void onCreate() { 

    } 
} 

我的ApplicationController類。 錯誤日誌:

07-20 14:06:09.487: W/dalvikvm(6668): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
07-20 14:06:09.497: E/AndroidRuntime(6668): FATAL EXCEPTION: main 
07-20 14:06:09.497: E/AndroidRuntime(6668): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jacksonrecipes.testapp/com.jacksonrecipes.testapp.Main}: java.lang.ClassCastException: android.app.Application 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread.access$2300(ActivityThread.java:135) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.os.Looper.loop(Looper.java:144) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread.main(ActivityThread.java:4937) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at java.lang.reflect.Method.invoke(Method.java:521) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at dalvik.system.NativeStart.main(Native Method) 
07-20 14:06:09.497: E/AndroidRuntime(6668): Caused by: java.lang.ClassCastException: android.app.Application 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at com.jacksonrecipes.testapp.Main.onCreate(Main.java:52) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
07-20 14:06:09.497: E/AndroidRuntime(6668):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751) 

我做出了最終的變量,因爲我認爲它可能有一些做這一點,但沒有奏效。有誰知道未捕獲的異常可能是什麼以及如何解決我的問題?

編輯:忘了,顯示我的表現,我不知道這是正確的,所以我說的:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".Main" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 
<application 
    android:label="@string/app_name" 
    android:name=".ApplicationController" 
    /> 

回答

4

你應該在你的Android項目Manifest.xmlApplicationController是這樣定義應用程序的名稱:

<application 
    android:name=".ApplicationController" 
...... 

編輯你已經在你的清單提供的兩個應用程序。從這個更改您的清單:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
<activity 
    android:name=".Main" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
</application> 
<application 
    android:label="@string/app_name" 
    android:name=".ApplicationController" 
/> 

這樣:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:name=".ApplicationController" > 
<activity 
    android:name=".Main" 
    android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
</application> 

,我想你會好起來

+1

我其實定義名稱爲應用程序,但我忘了表現出來。謝謝你指出,我的錯誤可能在那裏。我編輯了我的帖子。 – Jasper 2012-07-20 12:40:54

+0

@賈斯珀我已經更新了我的答案。希望有所幫助。 – Angelo 2012-07-20 12:49:10

+0

太棒了,它工作完美。謝謝你的快速和準確的答案。 – Jasper 2012-07-20 13:03:39

相關問題