J'essaie de partager deux ArrayLists à travers les différentes activités de mon application, en utilisant le schéma expliqué ici: Comment déclarer des variables globales dans Android? .
Voici ma sous-classe d'application:
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;
}
}
Et utilisé le code:
GlobalVars gv = (GlobalVars)getApplicationContext();
players = gv.getPlayers();
playerNames = gv.getPlayerNames();
Pour accéder à ces variables. La première ligne là où je définis gv lève une exception classcastexception. Quelqu'un sait pourquoi?
Voici le code que j'ai ajouté au manifeste:
<application Android:name="com.myname.GlobalVars"
Android:icon="@drawable/icon"
Android:label="@string/app_name"></application>
edit: pour plus de clarté, voici tout mon manifeste:
<?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>
Pour développer la réponse de Peter K, vous n'avez pas besoin de créer un second <application>
section pour votre classe d'application dérivée. Il vous suffit de "renommer" votre <application>
section en la modifiant avec le Android:name
tag. Je tiens également à souligner que le nom de classe complet est requis (comme vous l'avez fait correctement ... J'ai trouvé cela à la dure).
<?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>
Pour être clair,
<application
Android:allowBackup="true"
Android:icon="@drawable/icon_app"
Android:label="@string/app_title"
Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen" >
Est mon manifeste existant. Pour déclarer une autre application dans mon manifeste existant et/ou une application, je voudrais simplement ajouter:
Android:name="com.XXXXXX.data.DataStore"
Le résultat final sera donc:
<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" >
Vous devez appeler getApplication()
dans votre activité ou service:
GlobalVars gv = (GlobalVars)getApplication();
Modifier:
Tu as <application>
défini deux fois dans votre manifeste.