2016-05-22 7 views
1

共有設定を保存しないアプリがあります。私はcommit()apply()の両方を使用してこれらの設定を保存しようとしましたが、アプリケーションが終了すると保存されません。私のアプリの画面を変更すると、変更は行われますが、アプリの再起動時に失われます。SharedPreferencesがアプリケーションに保存されていません。

アプリの起動時に呼び出される静的な方法ではなく、 "嗜好:CREATED 1つのLOCATION":

static { 
     prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.getContext());//MainActivity.getContext().getSharedPreferences("LocationTimer", Context.MODE_PRIVATE); 
     editor = prefs.edit(); 
     if(!prefs.contains("totalLocations")) { 
      prefs.edit().putInt("totalLocations", 0).commit(); 
     } 
     if(prefs.getInt("totalLocations", 0) == 0) { 
      for (int i = 1; i <= COUNT; i++) { 
       addItem(createLocationItem(i)); 
      } 
      Log.i("PREFERENCES", "CREATED 1 LOCATION"); 
     } else { 
      for (int i = 1; i <= prefs.getInt("totalLocations", 1); i++) { 
       addItem(new LocationItem(String.valueOf(i), "Location " + String.valueOf(i), prefs.getString(String.valueOf(i), ""))); 
      } 
      Log.i("PREFERENCES", "LOADED LOCATION(S)"); 
     } 
     Log.i("PREFERENCES", "LOADED " + String.valueOf(prefs.getInt("totalLocations", 1)) +" LOCATION(S)"); 
    } 

ログインメッセージが "LOADED LOCATION(S)設定" であるIアイテムがロードされている知っているように単に作成されていません。いずれかの項目が作成されたときにロードされた/と呼ばれる

方法:アプリが既にロードされている間

public static void addItem(LocationItem item) { 
     ITEMS.add(item); 
     ITEM_MAP.put(item.id, item); 

     saveStringToPreferences(item.id, item.details); 

     editor.putInt("totalLocations", ITEMS.size()); 
     editor.apply(); 

     Log.i("PREFERENCES", "CONTAINS " + String.valueOf(prefs.getInt("totalLocations", 1)) +" LOCATION(S)"); 
     Log.i("ITEMS", "CONTAINS " + String.valueOf(ITEMS.size()) +" LOCATION(S)"); 
    } 

私はこれを言うことができますどのように環境設定を保存している上記のメッセージが1以外の他の数字が表示されています。 1つは、アプリの読み込み時に表示される量です。

ご協力いただきありがとうございます。ご不明な点がございましたら、投稿してください。できるだけ早く返信いたします。

+0

まず、 'editor = prefs.edit();'を実行していますが、エディタを使用していません。第2に、 'commit'はブール値を返します。正常に保存された場合は' true'を返します。チェックしたいかもしれません! – alfasin

+0

私は実際に2番目のコードブロックでエディタを使用します。あなたは正しいですが、私は最初のコードブロックでそれを使用しません。私はそれが真か偽を返すかどうかチェックします。助けてくれてありがとう! – TheAnonymous010

+0

頭が上がると、正常にコミットされ、 'true'が返されます。アプリの再起動後はまだ保存されません。 – TheAnonymous010

答えて

0

このような問題を抱えている皆様には、SharedPreferencesを専用のクラスファイルに入れてください。 AssetLoader.javaという名前のファイルを作成し、SharedPreferencesのすべての編集と初期化をそのファイルに配置しました。そのが追加作成されたときに自分のメインファイルで

import android.content.Context; 
import android.content.SharedPreferences; 

import com.xenicdev.locationtimer.MainActivity; 

public class AssetLoader { 
    private static SharedPreferences prefs; 

    public static void load() { 

     // Prefs 
     prefs = MainActivity.getContext().getSharedPreferences("LocationTimer", Context.MODE_PRIVATE); 
     if(!prefs.contains("totalLocations")) { 
      prefs.edit().putInt("totalLocations", 0).apply(); 
     } 
    } 

    public static void setTotalLocations(int totalLocations) { 
     prefs.edit().putInt("totalLocations", totalLocations).apply(); 
    } 

    public static Integer getTotalLocations() { 
     return prefs.getInt("totalLocations", 0); 
    } 

    public static void setItemDetails(String id, String details) { 
     prefs.edit().putString(id, details).apply(); 
    } 

    public static String getItemDetails(String id) { 
     return prefs.getString(id, ""); 
    } 
} 

この

は私AssetLoaderファイルです

AssetLoader.load(); 

そして、あなたの他のファイルでこれらのメソッドを呼び出すには、追加:

AssetLoader.getTotalLocations(); 

この方法を使用するもう1つの利点は、他のクラスをきわめて重要な量だけクリーンアップできることですSharedPreferencesをすべて削除し、単にAssetLoaderへの呼び出しを使用する場合

関連する問題