java.lang.NullPointerException for static field in Android library project
首先解释项目的设置方式:
-
Android库项目有两个类:
- UserActivity - 在HolderClass中使用静态字段
- HolderClass - 这个有静态字段数据
-
引用库项目的Android应用程序只有一个类:
- StarterActivity - 当app启动时,在onCreate中它将静态字段Data设置为某个值,并启动UserActivity
现在,问题是:有时我得到该静态字段数据的java.lang.NullPointerException - 好像我从未初始化它(或者同时删除了值)。它从未发生在我的测试设备上,但我不断从客户端设备获取错误报告。我只能猜测这是怎么发生的 - 也许用户导航离开应用程序,然后返回并且系统重新创建整个应用程序上下文,但在那个上下文中HolderClass有空的静态字段数据?
我的问题:
从Activity的onCreate初始化那个静态字段的方法是错误的吗?我应该在ApplicationContext中放入数据吗?或者做点什么?
我愿意接受所有建议。
附:如果你有从描述中可视化的问题,这就是我所说的所有内容在代码中的样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | // IN ANDROID APP PROJECT public class StarterActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // just start activity in library Intent myIntent = new Intent(this, AutolaunchActivity.class); startActivityForResult(myIntent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // exit when activity from library exits finish(); } } // IN LIBRARY PROJECT public class HolderClass { public static String Data; } public class UserActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // init layout } public void someButtonClicked() { HolderClass.Data.trim(); } } |
这里记录了在活动之间共享数据的常用方法。 错误的间歇性表明我有时间问题。 你在一些初始化中使用线程吗? 另外,你知道NPE是在StarterActivity还是UserActivity中发生的?
好吧,这基本上是全局变量的问题 - 最后我通过阅读这个答案来解决它:如何在Android中声明全局变量?