簡體   English   中英

如何使用SharedPreferences保存更改?

[英]how to save changes using SharedPreferences?

我正在開發一個應用程序,必須保存用戶所做的更改……用戶要單擊圖像,它將更改顏色。 我想保存更改。

我不確定該怎么做。 這是我要進行更改的地方。

我所知道的是我需要使用SharedPreferences

private ImageView bookmark;
bookmark = (ImageView) findViewById(R.id.imageView_bookmark_readIt);

bookmark.setOnClickListener(new View.OnClickListener(){

     private boolean bookmarking = true;

     public void onClick(View v){

      if(bookmarking){
         bookmark.setImageResource(R.drawable.ic_bookmarked_blue);
         bookmarking=false;
      }
      else{
         bookmarking=true;
         bookmark.setImageResource(R.drawable.ic_bookmark);
         //Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show();
       }
});

那么,有人知道如何保存對以上代碼所做的更改嗎?

注意:我沒有使用數據庫

 /**
 * Get a shared preferences file named Const.SHARED_PREFERENCES_FILE_NAME, keys added to it must be unique
 *
 * @param ctx
 * @return the shared preferences
 */
public static SharedPreferences getSharedPreferences(Context ctx) {
    return ctx.getSharedPreferences(Const.SHARED_PREFERENCES_FILE_NAME, Context.MODE_PRIVATE);
}

public static void cacheBoolean(Context ctx, String k, Boolean v) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    prefs.edit().putBoolean(k, v).apply();
}

public static Boolean getCachedBoolean(Context ctx, String k, Boolean defaultValue) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    return prefs.getBoolean(k, defaultValue);
}

public static void cacheString(Context ctx, String k, String v) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    prefs.edit().putString(k, v).apply();
}

public static String getCachedString(Context ctx, String k, String defaultValue) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    return prefs.getString(k, defaultValue);
}

public static void cacheInt(Context ctx, String k, int v) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    prefs.edit().putInt(k, v).apply();
}

public static int getCachedInt(Context ctx, String k, int defaultValue) {
    SharedPreferences prefs = getSharedPreferences(ctx);
    return prefs.getInt(k, defaultValue);
}

public static void clearCachedKey(Context context, String key) {
    getSharedPreferences(context).edit().remove(key).apply();
}

使用SharedPreferences非常容易。 您需要定義一個密鑰,以后將用於檢索數據。 您可以存儲字符串,整數,浮點數,布爾值...您需要提供上下文。

Context context = getApplicationContext();

要寫入數據,請使用此代碼。

SharedPreferences mPrefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("color", "blue");
editor.apply();

要檢索數據,請使用此

SharedPreferences mPrefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE);
String color = mPrefs.getString("color", "defaultValue");

您可以輕松地將類型從String更改為最適合您需要的其他類型。

希望能幫助到你。

希望它對你有幫助

 SharedPreferences sharedPrefs = getSharedPreferences("SharedPreferences_Name", Context.MODE_PRIVATE);
    private ImageView bookmark;
    bookmark = (ImageView) findViewById(R.id.imageView_bookmark_readIt);
    private boolean bookmarking = sharedPrefs.getBoolean("bookmarking",true);//To get value that saved in SharedPreferences 
    if(bookmarking){
        bookmark.setImageResource(R.drawable.ic_bookmarked_blue);
    }
    else{
        bookmark.setImageResource(R.drawable.ic_bookmark);
        //Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show();
    }
    bookmark.setOnClickListener(new View.OnClickListener(){

       // private boolean bookmarking = true;

        public void onClick(View v){

            if(bookmarking){
                bookmark.setImageResource(R.drawable.ic_bookmarked_blue);
                bookmarking=false;
                SharedPreferences.Editor editor = getSharedPreferences("SharedPreferences_Name", 0).edit();
                editor.putBoolean("bookmarking", bookmarking);
                editor.apply();
            }
            else{
                bookmarking=true;
                bookmark.setImageResource(R.drawable.ic_bookmark);
                //Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show();
                SharedPreferences.Editor editor = getSharedPreferences("SharedPreferences_Name", 0).edit();
                editor.putBoolean("bookmarking", bookmarking);
                editor.apply();
            }
        });

在共享首選項中,數據以“鍵值”格式存儲。 據我了解,您需要保存兩個字段,結果將如下所示:

“booking: true”
“bookmarkImageResource: 15670341274”

這是一種方便的方法:

第一步 -創建一個新的類SharedPrefs:

public class SharedPrefs {

private static final String SHARED_PREFERENCES_NAME = "user_prefs";
private static final String BOOKING_INFO = "booking";
private static final String BOOKMARK_IMAGE_RESOURCE_INFO = "bookmarkImageResource";
private final SharedPreferences prefs;

public SharedPrefs(Context context) {
    prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}

public boolean saveBookingInfo(String bookingInfo, String bookmarkImageResource) {
    return prefs.edit()
            .putString(BOOKING_INFO, bookingInfo)
            .putString(BOOKMARK_IMAGE_RESOURCE_INFO, bookmarkImageResource)
            .commit();
}

public Pair<String, String> getBookingInfo() {
    return new Pair<String, String>(
            prefs.getString(BOOKING_INFO, ""),
            prefs.getString(BOOKMARK_IMAGE_RESOURCE_INFO, ""));
}

public void clearAll() {
    prefs.edit().clear().apply();
}

}

第二步 -在需要保存,獲取或清除數據的地方使用課堂! 在您的情況下:

    SharedPrefs prefs = new SharedPrefs(this);  // or getActivity() instead of this if we are in a fragment      
    if(bookmarking){
        bookmark.setImageResource(R.drawable.ic_bookmarked_blue);
        bookmarking=false;
    }
    else{
        bookmarking=true;
        bookmark.setImageResource(R.drawable.ic_bookmark);
    }
    prefs.saveBookingInfo(String.valueOf(bookmarking), String.valueOf(bookmark));

希望這對您有幫助=)

祝您有美好的一天,編碼愉快!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM