Android 库项目中静态字段的 java.lang.NullPointerException
Posted
技术标签:
【中文标题】Android 库项目中静态字段的 java.lang.NullPointerException【英文标题】:java.lang.NullPointerException for static field in Android library project 【发布时间】:2011-07-01 00:41:59 【问题描述】:首先解释一下项目是如何设置的:
具有两个类的 android 库项目: UserActivity - 在 HolderClass 中使用静态字段 HolderClass - 这个有静态字段数据 引用Library项目的Android应用程序只有一个类: StarterActivity - 应用启动时,在 onCreate 中将静态字段 Data 设置为某个值,然后启动 UserActivity现在,问题是:有时我得到那个静态字段 Data 的 java.lang.NullPointerException - 好像我从未初始化它(或者值同时被删除)。它从未在我的测试设备上发生过,但我不断收到来自客户端设备的错误报告。我只能猜测这是怎么发生的——也许用户离开应用程序,然后返回,系统重新创建整个应用程序上下文,但在那个上下文中 HolderClass 有空的静态字段 Data?
我的问题:
从 Activity 的 onCreate 初始化该静态字段的方法是否错误?我应该将数据放在 ApplicationContext 中吗?还是做点别的?
我愿意接受所有建议。
附:如果您在从描述中可视化时遇到问题,以下是我所说的所有内容在代码中的样子:
// 在安卓应用项目中 公共类 StarterActivity 扩展 Activity @覆盖 公共无效 onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); // 刚刚在库中启动活动 Intent myIntent = new Intent(this, AutolaunchActivity.class); startActivityForResult(myIntent, 1); @覆盖 protected void onActivityResult(int requestCode, int resultCode, Intent data) super.onActivityResult(requestCode, resultCode, data); // 当库中的活动退出时退出 结束(); // 在图书馆项目中 公共类 HolderClass 公共静态字符串数据; 公共类用户活动扩展活动 @覆盖 公共无效 onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); // 初始化布局 公共无效 someButtonClicked() HolderClass.Data.trim();【问题讨论】:
可以显示一些代码吗? 发布错误报告,看看你到底得到了什么。 我已经提取了重要的行并发布了代码示例。 【参考方案1】:在活动之间共享数据的常用方法记录在 here。错误的间歇性对我来说是一个时间问题。您是否在某些初始化中使用线程?另外,你知道NPE发生在StarterActivity还是UserActivity?
【讨论】:
不,这不是线程问题...阅读您发送的链接指向“应用程序进程被杀死然后重新创建方向”,引用:“如果需要保留共享数据跨越可以终止应用程序进程的点,然后将该数据放在持久性存储中,例如应用程序首选项、SQLite DB、文件或内容提供程序。”【参考方案2】:好的,这基本上是全局变量的问题 - 最后我通过阅读这个答案解决了它:How to declare global variables in Android?
【讨论】:
以上是关于Android 库项目中静态字段的 java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向Android 逆向通用工具开发 ( Windows 平台静态库程序类型 | 编译逆向工具依赖的 Windows 平台静态库程序 )
使用 Clang 作为编译器构建 Android 项目时从静态库中隐藏符号
在 CMAKE 中包含来自 Android 项目的不同文件夹的静态库
Android Studio 3.0.1不会构建NDK静态库
如何将 libjpeg-turbo Android NDK 添加为静态库
android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)