welder para google funciona extensiones emulador ejecutar compatible chrome archon arc aplicaciones android global-variables

para - extensiones chrome android



Aplicación de extensión para compartir variables globalmente (3)

Estoy tratando de compartir dos ArrayLists en las distintas actividades de mi aplicación, usando el esquema que se explica aquí: ¿Cómo declarar las variables globales en Android? .

Aquí está mi subclase de aplicación:

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; } }

Y usó el código:

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

Para acceder a estas variables. La primera línea allí donde defino gv arroja una classcastexception. Alguien sabe por qué?

Aquí está el código que agregué al manifiesto:

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

editar: para aclarar, aquí está mi manifiesto completo:

<?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>


Debe llamar a getApplication() en su actividad o servicio:

GlobalVars gv = (GlobalVars)getApplication();

Editar:

Tiene <application> definida dos veces en su manifiesto.


Para profundizar en la respuesta de Peter K, no necesita crear una segunda sección de <application> para su clase de aplicación derivada. Simplemente necesita "cambiar el nombre" de su sección existente de <application> al modificarla con la etiqueta android:name . También quiero señalar que se requiere el nombre de clase completo (como lo has hecho correctamente ... descubrí esto por las malas).

<?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>


Para ser claro,

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

Es mi manifiesto existente. Para declarar otra aplicación dentro de mi manifiesto existente y / o la aplicación todos juntos, simplemente agregaría:

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

Entonces el resultado final será:

<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" >