Как сохранить изменения с помощью SharedPreferences? - PullRequest
0 голосов
/ 17 января 2019

Я работаю над приложением, и мне нужно сохранить изменения, сделанные пользователем ... пользователь собирается щелкнуть изображение, оно изменит цвет. И я хочу сохранить это изменение.

Я не уверен, как это сделать на самом деле. Вот где я хочу внести изменения.

Все, что я знаю, мне нужно использовать 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();
       }
});

Так кто-нибудь имеет представление о том, как сохранить изменения, внесенные в приведенный выше код?

Примечание: я не использую базу данных

Ответы [ 4 ]

0 голосов
/ 17 января 2019

В общих настройках данные хранятся в формате «ключ-значение». Насколько я понимаю, нужно сохранить два поля и это будет примерно так:

“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));

Надеюсь, это поможет вам =)

Хорошего дня и удачного кодирования!

0 голосов
/ 17 января 2019

Использование 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 на другие типы, которые могут лучше всего соответствовать вашим потребностям.

Надеюсь, это поможет.

0 голосов
/ 17 января 2019

Надеюсь, это поможет вам

 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();
            }
        });
0 голосов
/ 17 января 2019
 /**
 * 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...