2016-07-09 11 views
0

私は既にここで答えを探しましたが、私の特別なケースには何も適用されません。私はarrayListを持っていますアプリが終了した後にカスタムオブジェクトのArrayListを保存するにはどうすればよいですか?

ArrayList<GridItem> gridItems = new ArrayList<>(); 

ユーザーは、アプリケーションと対話してエントリを追加できます。私はSharedPreferencesがオブジェクトで動作しないことを理解しており、gsonを動作させることはできません。

私はarraylistをonPauseに保存し、onCreateに既存の保存済みリストを探したいと思います。これは正しいアプローチですか?

EDIT:各エントリが2つの文字列で構成されていることを明確にする必要があります。これは、OBJのコンストラクタです:

public GridItem(String Name, String Path){ 
     mName = Name; 
     mPath = Path; 
    } 

ので、各エントリは次のように基本的である:

gridItems.add("a name", "/sdcard/emulated etc etc") 
+2

でのOnCreate

でそれを使用しています。あなたはそれらをデータベースに1つずつ保存したり、GSONを動作させたり、シリアル化して文字列として保存したりできます。 – Vucko

+0

gsonを動作させることができないのはなぜですか?あなたはあなたのモデルのゴッドを投稿していただけますか?それはjsonの配列文字列として格納することはかなり簡単にする必要があります。逆シリアル化するgsonの適切なモデルを持っています – bartol

+0

基本的に私は配列を保存することができますが、私はそれを復元することはできません。あなたは私に例を教えていただけますか? – user11230

答えて

0

Realmだから私はそれが働いて得ることができたために彼らのように行く、それは多くのコードの混合物でした。 まず最初にonCreateでArrayListを初期化し、復元するデータがある場合は作業を行い、それ以外の場合はempy ArrayListを作成します。一時停止ので

In onCreate 
    // Create an ArrayList of GridItem objects 
      gridItems = new ArrayList<>(); // Now gridItems = [] 


      SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
      Gson gson = new Gson(); 
      String json = sharedPrefs.getString(TAG2, null); //Retrieve previously saved data 
      if (json != null) { 
       Type type = new TypeToken<ArrayList<GridItem>>() {}.getType(); 
       gridItems = gson.fromJson(json, type); //Restore previous data 
      } 
    //Initialize the view 
    //NOTE if you pass a null ArrayList<GridItem> the app will crash 
      gridAdapter = new GridItemAdapter(this, gridItems); 
//etc etc 

私は、画面上のArrayListが実際に存在取り、JSON形式に配置します。それから私は、JSONの値を保存して、はい、これはアプローチの一つであるonPause

//Set the values 
     SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
     SharedPreferences.Editor editor = sharedPrefs.edit(); 
     Gson gson = new Gson(); 

     String json = gson.toJson(gridItems); //Convert the array to json 

     editor.putString(TAG2, json); //Put the variable in memory 
     editor.commit(); 
0

あなたがSQLデータベースに格納しようとすることができます。または、何らかの形でSharedSettingsの文字列を連結します。複雑なデータの場合、私はSQLiteデータベースを行います。

+0

かなり単純なデータです(私の記事の編集を参照してください)が、ユーザーは多数のエントリに到達する可能性があります。私は前にsqliteで作業したことがないので、私はgsonを試してみると思います。 – user11230

0

はい、正しいアプローチです。 saving-arraylists-in-sqlite-databaseshow-to-save-my-arraylist-into-sqlite-database

そしてRealmのためにこの質問listobject-or-realmlistrealmobject-on-realm-androidを見ることができますし、RealmAndroidドキュメントのために行く:あなたは私に言わせればRealm Android

SharedPreferencesのために、あなたがこの質問を読むことができSqliteについてsave-arraylist-to-sharedpreferences

を見ることができますこれは最も簡単な方法ですが、SharedPreferencesを使用するように指示しますが、膨大な量のデータがある場合は、データベースで簡単に保管して管理できます。

あなたはSqliteRealmの間で選択をしたい場合はSqliteをして、我々はSqlコマンドを使用しているので、私は、queries.Butをそれはであなたが良いyou.Ifに依存するため、あなたに何かを伝えると、あなたがSqliteのために行くことができSqlについて知っ傾けます私は私のプロジェクトでRealmを使用しています。あなたはこのページを読むことができます:5-reasons-why-you-should-choose-realm-over-coredataRealmでは、PojoRealmObjectを学ぶ必要があります。

要約:最も簡単な方法はSharedPreferencesを使用していますが、少量のデータには適しています。

大量のデータがある場合は、それらを容易に管理するためにデータベースを使用する必要があります。あなたが知っている場合は、POJOクラスについて知っている場合についてSqlSqliteのために行くと

+0

おかげさまで、私の編集からわかるように、私のアプリの性質から多くのエントリーを作成できるような非常に簡単なデータがあります。私はすでにsharedprefリンクを見つけていましたが、私は保存した後、起動時にアレイをリセットする方法を理解していません – user11230

+0

具体的には:addTaskとTaskManagerApplicationClassについて彼が何を意味するのでしょうか? onPauseにコードを入れてはいけませんか? – user11230

+0

@ user11230あなたのユーザーが膨大な量のデータを保存できる場合は、モバイルデータベースを利用する必要があります。 **あなたはarraylistの代わりに**シリアライズされたオブジェクトをSharedPreferencesに保存する**を読んでいます。答えの最初の部分で十分です。 –

関連する問題