製品のリストがあり、Webサービスから取得します。アプリを初めて開くと、アプリはWebサービスから製品リストを取得します。このリストを共有設定に保存します。
List<Product> medicineList = new ArrayList<Product>();
製品クラスは次のとおりです。
public class Product {
public final String productName;
public final String price;
public final String content;
public final String imageUrl;
public Product(String productName, String price, String content, String imageUrl) {
this.productName = productName;
this.price = price;
this.content = content;
this.imageUrl = imageUrl;
}
}
毎回ウェブサービスからリクエストせずにこのリストを保存するにはどうすればよいですか?
プリファレンスはメモリに保持されるため、プリミティブ型のみを使用できます。しかし、使用できるのは、Gsonで型をjsonにシリアル化し、文字列を設定に入れることです:
private static SharedPreferences sharedPreferences = context.getSharedPreferences(STORE_FILE_NAME, Context.MODE_PRIVATE);
private static SharedPreferences.Editor editor = sharedPreferences.edit();
public <T> void setList(String key, List<T> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
set(key, json);
}
public static void set(String key, String value) {
editor.putString(key, value);
editor.commit();
}
GSONを使用して、Object-> JSON(.toJSON)およびJSON-> Object(.fromJSON)を変換できます。
必要に応じてタグを定義します(たとえば):
private static final String PREFS_TAG = "SharedPrefs";
private static final String PRODUCT_TAG = "MyProduct";
これらのタグのsharedPreferenceを取得します
private List<Product> getDataFromSharedPreferences(){
Gson gson = new Gson();
List<Product> productFromShared = new ArrayList<>();
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE);
String jsonPreferences = sharedPref.getString(PRODUCT_TAG, "");
Type type = new TypeToken<List<Product>>() {}.getType();
productFromShared = gson.fromJson(jsonPreferences, type);
return preferences;
}
SharedPreferencesを設定します
private void setDataFromSharedPreferences(Product curProduct){
Gson gson = new Gson();
String jsonCurProduct = gson.toJson(curProduct);
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(PRODUCT_TAG, jsonCurProduct);
editor.commit();
}
製品の配列を保存する場合。これをして:
private void addInJSONArray(Product productToAdd){
Gson gson = new Gson();
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(PREFS_TAG, Context.MODE_PRIVATE);
String jsonSaved = sharedPref.getString(PRODUCT_TAG, "");
String jsonNewproductToAdd = gson.toJson(productToAdd);
JSONArray jsonArrayProduct= new JSONArray();
try {
if(jsonSaved.length()!=0){
jsonArrayProduct = new JSONArray(jsonSaved);
}
jsonArrayProduct.put(new JSONObject(jsonNewproductToAdd));
} catch (JSONException e) {
e.printStackTrace();
}
//SAVE NEW ARRAY
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(PRODUCT_TAG, jsonArrayProduct);
editor.commit();
}
SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
保存用
Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(myObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
忘れる
Gson gson = new Gson();
String json = mPrefs.getString("MyObject", "");
MyObject obj = gson.fromJson(json, MyObject.class);
現在、2つのオプションがあります
a)SharedPreferencesを使用する
b)SQLiteを使用し、その中に値を保存します。
実行方法
a)SharedPreferences
最初にリストをセットとして保存し、SharedPreferencesから読み取るときにリストに戻します。
Listtasks = new ArrayList<String>();
Set<String> tasksSet = new HashSet<String>(Listtasks);
PreferenceManager.getDefaultSharedPreferences(context)
.edit()
.putStringSet("tasks_set", tasksSet)
.commit();
次に、それを読んだとき:
Set<String> tasksSet = PreferenceManager.getDefaultSharedPreferences(context)
.getStringSet("tasks_set", new HashSet<String>());
List<String> tasksList = new ArrayList<String>(tasksSet);
b)SQLiteの優れたチュートリアル: http://www.androidhive.info/2011/11/Android-sqlite-database-tutorial/
受け入れられた答えで述べたように、次のようなオブジェクトのリストを保存できます。
public <T> void setList(String key, List<T> list) {
Gson gson = new Gson();
String json = gson.toJson(list);
set(key, json);
}
public void set(String key, String value) {
if (setSharedPreferences != null) {
SharedPreferences.Editor prefsEditor = setSharedPreferences.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
}
}
以下を使用して入手してください:
public List<Company> getCompaniesList(String key) {
if (setSharedPreferences != null) {
Gson gson = new Gson();
List<Company> companyList;
String string = setSharedPreferences.getString(key, null);
Type type = new TypeToken<List<Company>>() {
}.getType();
companyList = gson.fromJson(string, type);
return companyList;
}
return null;
}
JSONに関連するすべての答えはOkですが、Javaを忘れないでください。Java.io.Serializableインターフェイスを実装すると、任意のオブジェクトをシリアル化できます。これをシリアル化されたオブジェクトとしてプリファレンスに保存します。プリファレンスとして保存する例を次に示します: https://Gist.github.com/walterpalladino/4f5509cbc8fc3ecf1497f05e37675111 オプション。
SharedPreferencesでは、プリミティブのみを保存できます。
1つの可能なアプローチとして、GSONを使用し、JSONの設定に値を保存することができます。
Gson gson = new Gson();
String json = gson.toJson(medicineList);
yourPrefereces.putString("listOfProducts", json);
yourPrefereces.commit();
以下のようにGson
を使用して実行できます。
List<Product>
_をダウンロードしますnew Gson().toJson(medicineList, new TypeToken<List<Product>>(){}.getType())
を使用して、List
をJsonString
に変換しますSharePreferences
に保存しますList
を再構築するには、Gson
で利用可能なfromJsonメソッドを使用してプロセスを元に戻す必要があります。