1

異なるアクティビティ間で状態データを渡すのに問題があります。現在、私はそれらのうちの4つを持っています:

  • アクティビティ間の座標 (大きな onActivityResult メソッド) であり、実際の UI はありません (空白のレイアウトのみ)。
  • Bはいくつかのデータを追加します(文字列)
  • C いくつかのデータを追加します (写真を撮る)
  • D はアップロード前のデータのレビューを示し、その後状態は削除されます

最初に、このワークフローの状態をアクティビティ A のインスタンス変数に保存しましたが、ほとんどの場合、Android は B から戻ったときに A をガベージ コレクションしていたため (おそらく方向の変更が原因で)、Null ポインター例外が発生していました。次に、B が結果とともに A に戻ったときに作成されたパーセル可能なオブジェクト内に状態を保存してから、そのオブジェクトを C に渡してみました。C に問題なく到着しますが、オブジェクトを C から再度パーセルして返すときにAになぜか届かない。これにより、オブジェクトを A から D に渡そうとすると、別の NPE が発生します。

最後に、データを削除する必要があります: アップロード後に D によって、またはアプリを途中で閉じてすべてのアクティビティを完了しない場合。A (または実際に使用可能なアクティビティである B) からやり直すことになります。

今では、私の現在の構造は、本来あるべきよりもはるかに複雑になっていると感じています. アクティビティAはカットすべきだと思います。しかし、その代わりに何を実装すればよいかわかりません。また、アクティビティ C を 2 回または 3 回繰り返し可能にする方法についてもわかりません。毎回データを追加してから、D に進みます。私が見つけた可能な解決策:

私は Android 開発に不慣れです...おそらく遅かれ早かれすべてが機能するようになるでしょうが、私の場合の適切な解決策は何ですか?

4

2 に答える 2

2

Activity Lifecycleにもっと注意を払う必要があります。あなたの場合、インテントと結果でエクストラを使用するだけで十分です。Services と SharedPreferences は、間違いなくあなたが望むものではありません。アプリケーションの拡張は、非常に複雑なデータや巨大なデータの場合に適したオプションですが、これはあなたの場合とは異なります。

于 2013-03-06T09:29:12.910 に答える
1

使用できます

android.app.Application class

アプリでは、アプリケーション レベルのクラスであり、menifest.xml ファイルで構成することによって自動的に作成されます。アクティビティでこのクラスにアクセスするには、

getApplication();

このクラスと 1 つのアクティビティからアプリケーション レベルのデータを設定し、それを別のアクティビティで使用できます。

于 2013-03-06T11:44:39.860 に答える