ArrayList作为全局变量
我创建了类似于应用程序扩展的类
package com.appnetics; import java.util.ArrayList; import android.app.Application; public class GlobalVariables extends Application { public ArrayList encounters; }
并将它设置为这样的表现forms
在一个Actiity中,我使用此代码填充此数组
GlobalVariables appState = new GlobalVariables(); appState.encounters =new ArrayList(); ................ then add
当试图使用它时崩溃与nullexception,我在另一个活动或类中使用它
GlobalVariables appState = new GlobalVariables(); Encounter EncounterObject = appState.encounters.get(position);
请问有什么遗失,如何解决这个问题
它是GlobalVariables
类的实例变量,因此每次创建GlobalVariables
的新实例时,您都将获得一个单独的变量。
如果你真的想要一个全局变量,那么它应该是一个静态变量 – 但即便如此,只有在同一进程中的活动之间共享数据时才会起作用。 您应该阅读Android应用程序框架FAQ以获取更多信息。
我会在这里使用Singleton模式。 维基百科链接
public class GlobalVariables { public ArrayList encounters; private GlobalVariables() { encounters = new ArrayList (); } private static GlobalVariables instance; public static GlobalVariables getInstance() { if (instance == null) instance = new GlobalVariables(); return instance; } }
然后您可以使用以下方法访问您的数据:
GlobalVariables.getInstance().encounters.get(position);
您可以创建提供一个对象实例的singleton([http://en.wikipedia.org/wiki/Singleton_pattern])类。 并在此类中创建可validation的ArrayList。 你可以在任何你想要的地方访问这个arraylist。 单例类:
public class Singleton { private 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(); } }
您每次都通过调用构造函数来创建一个新的应用程序对象,而不是通过方法getApplication()来获取应用程序引用。 所以你应该编辑你的代码:
GlobalVariables appState = (GlobalVariables) getApplication(); appState.encounters =new ArrayList(); ................ then add
和
GlobalVariables appState = (GlobalVariables) getApplication(); Encounter EncounterObject = appState.encounters.get(position);
- JSE 1.8,Sandbox Java Applet通过HTTPS加载,但是使用HTTP检索了crossdomain.xml
- 为什么Arrays.toString(values).trim()会生成?
- 请求PACKAGE_USAGE_STATS的权限
- 方法“onItemSelected”在数组适配器和片段中不起作用
- 使用PreferenceActivity的ListActivity选择子类别
- Javah:错误:无法访问android.support.v7.app.ActionBarActivity
- 样式添加行到ArrayAdapter ListView Android
- Android线程/处理程序错误IllegalStateException:尚未发布指定的消息队列同步障碍标记
- 使用应用程序android将图像上传到谷歌云存储
- 等到检索到Firestore数据以启动活动
- 如何获取java中的所有网络接口并将信息存储在Java Map中