Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道当前是否存在活动实例?_Java_Android_Android Activity_Nullpointerexception - Fatal编程技术网

Java 如何知道当前是否存在活动实例?

Java 如何知道当前是否存在活动实例?,java,android,android-activity,nullpointerexception,Java,Android,Android Activity,Nullpointerexception,情况: 当退出android应用程序的主活动时,我希望调用活动的活动实例上的方法,以使它们清除数组中的数据(这样在返回应用程序时数组就不会被填充) MainActivity.java中的 // ... @Override public void onDestroy() { super.onDestroy(); // call method to clear an array list of its data // NullPointerException here

情况:
当退出android应用程序的主活动时,我希望调用活动的活动实例上的方法,以使它们清除数组中的数据(这样在返回应用程序时数组就不会被填充)

MainActivity.java中的

// ...
@Override
public void onDestroy() {       
   super.onDestroy();
   // call method to clear an array list of its data
   // NullPointerException here if OtherActivity has no current living instance
   OtherActivity.clearAllData();        
}
// ...
private static ArrayList <String> myStringCollection;
// ...
public static void clearAllData(){
   if(myStringCollection.size() > 0){
     myStringCollection.clear();
     Log.d(TAG, "clearing data in OtherActivity");
   }

}
在OtherActivity.java中

// ...
@Override
public void onDestroy() {       
   super.onDestroy();
   // call method to clear an array list of its data
   // NullPointerException here if OtherActivity has no current living instance
   OtherActivity.clearAllData();        
}
// ...
private static ArrayList <String> myStringCollection;
// ...
public static void clearAllData(){
   if(myStringCollection.size() > 0){
     myStringCollection.clear();
     Log.d(TAG, "clearing data in OtherActivity");
   }

}
/。。。
私有静态数组列表myStringCollection;
// ...
公共静态void clearAllData(){
if(myStringCollection.size()>0){
myStringCollection.clear();
Log.d(标记“清除其他活动中的数据”);
}
}
问题:
我们如何知道OtherActivity是否有当前活动实例,以便安全地调用OtherActivity.clearAllData()

代码试图执行的操作:

退出应用程序并返回应用程序后,某些ArrayList中仍有旧数据,因此新数据(重复数据)会堆积在顶部。此代码试图清除主活动onDestroy()上的ArrayList中的数据,以便以后返回应用程序时不会有旧数据。

您的代码当前使用的是静态变量。静态变量附加到类加载器,而不是类的实际实例。这意味着您实际上不需要一个有效的实例来完成上面的工作。只需使用类似于
myStringCollection!=null
以确保变量已初始化,并且您应该没有问题


请注意,如果您真的想访问非静态变量,请澄清。

谢谢您的反馈。我试试看。我正在使用类方法调用另一个活动的方法,并来回传递数据(可能不是最好的方法,但…),我将研究
SharedReferences
。这是在类之间传递数据的一种简单方法。如果您不希望数据持久化,那么在您的
意图中添加
附加内容
也会非常有帮助。更新:这停止了NullPointerException,但在应用程序退出后未能成功清除阵列数据。问题已经超出了问题的范围,因此我将接受您的答案并重新考虑该方法。再次感谢。