2

首先解释一下项目是如何设置的:

  • 具有两个类的 Android 库项目:
    • UserActivity - 在 HolderClass 中使用静态字段
    • HolderClass - 这个有静态字段数据
  • 引用 Library 项目的 Android 应用程序只有一个类:
    • StarterActivity - 当应用程序启动时,在 onCreate 中它将静态字段 Data 设置为某个值,并启动 UserActivity

现在,问题是:有时我会为该静态字段 Data 获得 java.lang.NullPointerException - 好像我从未初始化它(或者同时删除了值)。它从未在我的测试设备上发生过,但我不断收到来自客户端设备的错误报告。我只能猜测这是怎么发生的——也许用户离开应用程序,然后返回并且系统重新创建整个应用程序上下文,但在那个上下文中 HolderClass 有空的静态字段 Data?

我的问题:

从 Activity 的 onCreate 方法初始化该静态字段是否错误?我应该将数据放在 ApplicationContext 中吗?还是做点别的?

我愿意接受所有建议。

PS 如果您在从描述中进行可视化时遇到问题,以下是我所说的所有内容在代码中的外观:

// 在安卓应用项目中
公共类 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();
    }
}
4

2 回答 2

1

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

于 2011-02-21T03:49:44.797 回答
0

好的,这基本上是全局变量的问题 - 最后我通过阅读这个答案解决了它:如何在 Android 中声明全局变量?

于 2011-06-02T17:33:33.940 回答