扩展应用程序以全局共享variables

我试图在应用程序的各种活动中共享两个ArrayLists,使用这里解释的scheme: 如何在Android中声明全局variables? 。

这是我的应用程序子类:

public class GlobalVars extends Application{ ArrayList<Player> players = new ArrayList<Player>(); ArrayList<String> playerNames = new ArrayList<String>(); public ArrayList<Player> getPlayers(){ return players; } public ArrayList<String> getPlayerNames(){ return playerNames; } public void setPlayers(ArrayList<Player> p){ players = p; } public void setPlayerNames(ArrayList<String> pn){ playerNames = pn; } } 

并使用代码:

  GlobalVars gv = (GlobalVars)getApplicationContext(); players = gv.getPlayers(); playerNames = gv.getPlayerNames(); 

要访问这些variables。 我在那里定义gv的第一行抛出classCastexception。 任何人知道为什么

这是我添加到清单中的代码:

 <application android:name="com.myname.GlobalVars" android:icon="@drawable/icon" android:label="@string/app_name"></application> 

编辑:澄清,这是我的整个清单:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myname.bpstattracker" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BPStatTracker" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".BPSTAdd"></activity> <activity android:name=".OneOrThree"></activity> <activity android:name=".SixOrTen"></activity> </application> <application android:name="com.myname.GlobalVars" android:icon="@drawable/icon" android:label="@string/app_name"> </application> </manifest> 

为了详细说明Peter K的答案,您不需要为派生的Application类创build第二个<application>部分。 您只需通过修改android:name标记来“重命名”现有的<application>部分即可。 我也想指出,完全合格的类名是必需的(正如你已经做对了…我发现这很难)。

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myname.bpstattracker" android:versionCode="1" android:versionName="1.0"> <application android:name="com.myname.GlobalVars" android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BPStatTracker" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".BPSTAdd"></activity> <activity android:name=".OneOrThree"></activity> <activity android:name=".SixOrTen"></activity> </application> </manifest> 

要清楚的是,

 <application android:allowBackup="true" android:icon="@drawable/icon_app" android:label="@string/app_title" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 

是我现有的清单。 要在我的现有清单中声明另一个应用程序,或者将所有应用程序放在一起,我只需简单地添加:

 android:name="com.XXXXXX.data.DataStore" 

所以最终的结果是:

 <application android:name="com.XXXXXX.data.DataStore" *<-- class that extends Application and has global variables with exact package and class name* android:allowBackup="true" android:icon="@drawable/icon_app" android:label="@string/app_title" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 

您应该在您的活动或服务中调用getApplication()

 GlobalVars gv = (GlobalVars)getApplication(); 

编辑:

您的清单中已经定义了两次<application>