我创建了类似于
的应用程序扩展的类package com.appnetics;
import java.util.ArrayList;
import android.app.Application;
public class GlobalVariables extends Application {
public ArrayList<Encounter> encounters;
}
并将其设置为像这样的表现者
<application
android:name="GlobalVariables"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
在一个Actiity中,我使用此代码填充此数组
GlobalVariables appState = new GlobalVariables();
appState.encounters =new ArrayList<Encounter>();
................
then add
当尝试使用它时会崩溃并出现null异常,我会在其他活动或类中使用它
GlobalVariables appState = new GlobalVariables();
Encounter EncounterObject = appState.encounters.get(position);
请问有什么遗失,如何解决
答案 0 :(得分:4)
它是GlobalVariables
类的实例变量,因此每次创建GlobalVariables
的新实例时,您和#39;将获得一个单独的变量。
如果确实想要一个全局变量,那么它应该是一个静态变量 - 但即便如此,只有当您在其中的活动之间共享数据时才会这样做。同样的过程。您应该阅读Android Application Framework FAQ以获取更多信息。
答案 1 :(得分:3)
我会在这里使用Singleton模式。 Wikipedia link
public class GlobalVariables {
public ArrayList<Encounter> encounters;
private GlobalVariables() {
encounters = new ArrayList<Encounter>();
}
private static GlobalVariables instance;
public static GlobalVariables getInstance() {
if (instance == null) instance = new GlobalVariables();
return instance;
}
}
然后您可以使用以下方式访问您的数据:
GlobalVariables.getInstance().encounters.get(position);
答案 2 :(得分:2)
您可以制作提供一个对象实例的singleton([http://en.wikipedia.org/wiki/Singleton_pattern])类。并在此类中创建可验证的ArrayList。你可以在任何你想要的地方访问这个arraylist。 例如单身人士类:
public class Singleton {
private ArrayList<Object> arrayList;
private static Singleton instance;
private Singleton(){
arrayList = new ArrayList<Object>();
}
public static Singleton getInstance(){
if (instance == null){
instance = new Singleton();
}
return instance;
}
public ArrayList<Object> getArrayList() {
return arrayList;
}
}
在活动中使用:
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Singleton.getInstance().getArrayList();
}
}
答案 3 :(得分:1)
您每次都通过调用构造函数来创建一个新的应用程序对象,而不是通过方法getApplication()获取应用程序引用。因此,您应该将代码编辑为:
GlobalVariables appState = (GlobalVariables) getApplication();
appState.encounters =new ArrayList<Encounter>();
................
then add
和
GlobalVariables appState = (GlobalVariables) getApplication();
Encounter EncounterObject = appState.encounters.get(position);