【问题标题】:java.lang.NullPointerException for static field in Android library projectAndroid 库项目中静态字段的 java.lang.NullPointerException
【发布时间】: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(); } }

【问题讨论】:

  • 可以显示一些代码吗?
  • 发布错误报告,看看你到底得到了什么。
  • 我已经提取了重要的行并发布了代码示例。

标签: android android-library


【解决方案1】:

在活动之间共享数据的常用方法记录在 here。错误的间歇性对我来说是一个时间问题。您是否在某些初始化中使用线程?另外,你知道NPE发生在StarterActivity还是UserActivity?

【讨论】:

  • 不,这不是线程问题...阅读您发送的链接指向“应用程序进程被杀死然后重新创建方向”,引用:“如果需要保留共享数据跨越可以终止应用程序进程的点,然后将该数据放在持久性存储中,例如应用程序首选项、SQLite DB、文件或内容提供程序。”
【解决方案2】:

好的,这基本上是全局变量的问题 - 最后我通过阅读这个答案解决了它:How to declare global variables in Android?

【讨论】:

    猜你喜欢
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多