2

最初にプロジェクトの設定方法を説明します。

  • 2つのクラスを持つAndroidライブラリプロジェクト:
    • UserActivity-HolderClassの静的フィールドを使用します
    • HolderClass-これには静的フィールドデータがあります
  • ライブラリプロジェクトを参照するAndroidアプリケーションには、次の1つのクラスしかありません。
    • StarterActivity-アプリが起動すると、onCreateで静的フィールドのデータが何らかの値に設定され、UserActivityが起動します

ここで、問題は次のとおりです。静的フィールドDataに対してjava.lang.NullPointerExceptionが発生することがあります。これは、初期化したことがない(またはその間に値が削除された)かのようです。テストデバイスでは発生しませんでしたが、クライアントデバイスからエラーレポートを受け取り続けています。私はそれがどのように起こるかを推測することしかできません-おそらくユーザーはアプリから離れて戻ってきて、システムはアプリケーションコンテキスト全体を再作成しますが、そのコンテキストでは、HolderClassには空の静的フィールドDataがありますか?

私の質問:

アクティビティのonCreateからのその静的フィールドの初期化は間違ったアプローチですか?ApplicationContextにデータを配置する必要がありますか?または何か他のことをしますか?

私はすべての提案を受け入れます。

PS説明からの視覚化に問題がある場合、私が言ったことすべてがコードでどのように見えるかを次に示します。

//ANDROIDAPPプロジェクトで
パブリッククラスStarterActivityはActivity{を拡張します
    @オーバーライド
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        //ライブラリでアクティビティを開始するだけ
        インテントmyIntent=new Intent(this、AutolaunchActivity.class);
        startActivityForResult(myIntent、1);    
    }

    @オーバーライド
    protected void onActivityResult(int requestCode、int resultCode、Intent data){
        super.onActivityResult(requestCode、resultCode、data);

        //ライブラリからのアクティビティが終了すると終了します
        終了();       
    }
}


//ライブラリプロジェクト内

パブリッククラスHolderClass{
    public static String Data;
}

パブリッククラスUserActivityはActivity{を拡張します
    @オーバーライド
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        //初期レイアウト  
    }

    public void someButtonClicked(){
        HolderClass.Data.trim();
    }
}
4

2 に答える 2

1

アクティビティ間でデータを共有する通常の方法は、ここに記載されています。エラーの断続的な性質は、タイミングの問題を示唆しています。初期化の一部でスレッドを使用していますか?また、NPEがStarterActivityまたはUserActivityのどちらで発生しているか知っていますか?

于 2011-02-21T03:49:44.797 に答える
0

OK、これは基本的にグローバル変数の問題でした-結局、私はこの答えを読んでそれを解決しました:Androidでグローバル変数を宣言する方法は?

于 2011-06-02T17:33:33.940 に答える