0

前に述べたように、私はアンドロイド開発を始めたばかりで、アクティビティからアクティビティへと頭を悩ませています。さまざまな活動で必要なときにデータを使用できるように、データを保存する最良の方法は何だろうと思っています。

Web 開発のバックグラウンドを持つ私は、これをセッションや Cookie にデータを保存するようなものだと考えています。バックグラウンドに存在し、必要なときにアクセスできるもの。(DBも使用できることは承知していますが、この特定のアプリでは可能であればDBの使用を避けたいと思います)

議論のために、乗算アクティビティ全体で永続的な従業員オブジェクトのリンクリストが必要だとします。ワーカースレッドでリンクリストを作成した場合、このスレッドはアプリケーションの存続期間中存在し、いつでも UI スレッドでデータを使用できるようになりますか?

ありがとう

4

8 に答える 8

3

コンテンツは、Webまたはデータベースからデータを取得するContentProvidersを介してアクセスできる必要があります。アプリケーション内のすべてのアクティビティとフラグメントは、必要に応じてコンテンツプロバイダーにデータを要求できます。

従業員のリストがある例では、従業員は「Employees」データベーステーブルにあり、プロバイダーは、まとめたSQLクエリに基づく応答を含むCursorオブジェクトを返す必要があります。

データベースへのアクセスについては、 SQLiteOpenHelperを参照してください。

コンテンツプロバイダーについては、ContentProvidersを参照してください。

これは簡単なテーマではなく、学ぶべきことがたくさんありますが、それをやり遂げると、アプリケーションの品質が大幅に向上します。このテーマに関するチュートリアルについては、このリンクを参照してください。

また、ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-02-06T22:07:13.247 に答える
2

SharedPreferences設定、大きなリレーショナル情報の DB、さらにはファイルなど、小さなデータ ストレージに使用できるデータを保存します。あなたの場合、それはデータサイズに依存します。

しかし、あなたの質問は、このデータを保存することよりも、さまざまなアクティビティからこのデータにアクセスする方法にあるようです。

Applicationオブジェクトを確認することをお勧めします。これは通常、アプリケーションが存続している限りメモリに残るシングルトンです。したがって、データをロードして、どこからでも取得できます。異なるスレッドからアクセスしたい場合は、同時実行の問題から保護することを念頭に置いてください。それだけです。

于 2013-02-06T22:12:12.393 に答える
1

ご覧のとおり、いくつかのオプションがありますが、アプリケーションの存続期間中に何かにアクセスしたいと具体的に言うと、ドキュメントに記載されている Application クラスを参照する必要があります

グローバルなアプリケーションの状態を維持する必要がある人のための基底クラス

マニフェストで Application を拡張するクラスの名前を指定する必要があります。これは、アプリケーション プロセスの開始時にインスタンス化され、アプリが動作しているときはいつでも存在することを確認できます。

ここでドキュメントを参照できます

http://developer.android.com/reference/android/app/Application.html

例として、次のような Application を拡張するクラスを作成する必要があります。

public class MyApplication extends Application {
    ...
}

そして、マニフェストを編集して、上記のクラスを参照するタグを含めます:-

<application ... android:name="com.fullpat.to.MyApplication">

ありがとう、

ライアン

于 2013-02-06T22:18:55.833 に答える
0

共有設定は、一般的な方法です。リストによってはそれほど簡単ではないかもしれませんが。それをStringSetに適合させることができれば、オブジェクトのデータ対流なしで共有設定に適しています。

実際には、別のアイデアとして、リストをアプリのアプリケーションクラスのオブジェクトとして使用することもできます。アプリケーションクラスは、アプリ内のアクティビティからアクセスでき、「グローバル変数」を保持するためによく使用されます。

于 2013-02-06T22:00:46.313 に答える
0

そのためにSharedPreferencesを使用できると思います。APIは非常に簡単です。また、アプリのクローズなどでデータをクリーンアップできます。

于 2013-02-06T22:06:32.173 に答える
0

昔はそのままデータを渡していIntent Extraたのですが、ReplicaIsland Repのソースコードに素敵なデザインパターンが使われているのを見つけました。

アイデアは、クラスを SystemRegistry として使用し、データを静的オブジェクトとして保持することです。

次のようになります。

public class SystemRegistry {
         public static LinkedList<Object> myList;

 }

アプリやアクティビティのあらゆる部分から。あなたはただ電話する

SystemRegistry.myList 
于 2013-02-06T22:02:10.443 に答える
0

オブジェクトのリストのみを保持する必要がある場合は、アプリケーション クラスを拡張して、このリストをそこに「保存」することができます。他の場合では、アクティビティ、コンテンツ プロバイダー、そしてもちろん sqlite データベースの間で Extras を意図的に使用すると、「よりクリーン」に見えます。

于 2013-02-06T22:10:44.223 に答える
0

オブジェクト指向の開発ビューでは、必要なものは非常に単純です。

アプリケーションの有効期間の開始時に開始されるアクティビティである MainActivity には、LinkedList があります。

public class MainActivity extends Application {    

  private LinkedList<employee> employees = new LinkedList<employee>();

  public LinkedList getEmployees() {
    return this.employees;
  }

2 番目のアクティビティでは:

public class SeconActivity extends Activity {

  private MainActivity         app;
  private LinkedList<employee> emp;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.app = (MainActivity) getApplication();
    this.emp = app.getEmployees();

アプリケーション全体の少量のデータについては、SharedPreferencesクラスを使用できます。

于 2013-02-06T22:11:27.560 に答える