SharedPreferences - редактируйте значения объекта, сохраненные в файле Json - PullRequest
0 голосов
/ 20 января 2019

Итак, у меня есть приложение, которое создает текстовые заметки, которые содержат заголовок и описание. Поскольку у меня есть класс «Note», я использовал gsonToJson (и наоборот) с SharedPreferences, чтобы сохранить и загрузить ArrayList Notes. Создание и сохранение заметок работают нормально, но теперь я хочу отредактировать заметку, которую выбирают пользователи.

Вот код для создания заметки:

public class TextNote_creation extends AppCompatActivity {

public EditText title;
public EditText desc;
public List<Note> notes;
SharedPreferences sharedPreferences;

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.textnote_create, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()){

        case R.id.confirmTextNote:

            notes = new ArrayList<>();

            String key = "notes";
            String response;

            Gson gson = new Gson();

            sharedPreferences = TextNote_creation.this.getSharedPreferences("com.example.rui.trabalhopjdm", Context.MODE_PRIVATE);          


            notes.add(new Note(title.getText().toString(), title.getText().toString(), android.R.drawable.ic_menu_agenda));


            SharedPreferences.Editor prefsEditor;

            String jsonNotes = gson.toJson(notes);


            prefsEditor = sharedPreferences.edit();
            prefsEditor.putString(key , jsonNotes);
            prefsEditor.apply();

            Intent intent = new Intent(TextNote_creation.this, Notes.class);
            startActivity(intent);




        default:
            return super.onOptionsItemSelected(item);
    }

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_note_creation);

    title = (EditText) findViewById(R.id.createTitle);
    desc = (EditText) findViewById(R.id.createDesc);


}
}

В редакторе действий у меня уже есть код для загрузки файла и помещения его в массив заметок:

public class TextNote extends AppCompatActivity {

public EditText noteEditor;
public List<Note> notes = new ArrayList<>();
public EditText title;
public int noteId;
public int noteIndex;



SharedPreferences sharedPreferences;

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.save_menu, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()){

        case R.id.saveNote:

            sharedPreferences = TextNote.this.getSharedPreferences("com.example.rui.trabalhopjdm", Context.MODE_PRIVATE);

            Gson gson = new Gson();

            for(int i = 0; i < notes.size(); i++){

                if(i == noteIndex){

                    notes.get(i).setTitle(title.getText().toString());
                    notes.get(i).setDesc(noteEditor.getText().toString());
                }
            }

            SharedPreferences.Editor editor = sharedPreferences.edit();

            String jsonNotes = gson.toJson(notes);




            Intent intent = new Intent(TextNote.this, Notes.class);
            startActivity(intent);

            return true;

            default:

                return super.onOptionsItemSelected(item);
    }


}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_note);

    noteEditor = (EditText) findViewById(R.id.editText);
    title = (EditText) findViewById(R.id.title);

    Intent intent = getIntent();
    noteId = intent.getIntExtra("noteId", -1);

    noteIndex = noteId - 1;

    if (noteId != -1){

        title.setText(Notes.notes.get(noteId).getTitle());
        noteEditor.setText(Notes.notes.get(noteId).getDesc());
    }

    sharedPreferences = TextNote.this.getSharedPreferences("com.example.rui.trabalhopjdm", Context.MODE_PRIVATE);

    String key = "notes";
    String response = "";

    Gson gson = new Gson();

    response = sharedPreferences.getString(key, null);

    if (response == null)
    {

    }else{

        notes = gson.fromJson(response, new TypeToken<List<Note>>(){}.getType());
    }


}
}

Итак, на данный момент я получаю только примечание, связанное с идентификатором, который я передал в Intent, и изменяю значения, но теперь, как мне использовать эти значения для редактирования примечания, сохраненного в файле JSON?

1 Ответ

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

В общих настройках значения хранятся в паре Ключ-значение, поэтому, если вы просто сохраните отредактированное значение с соответствующим ключом, предыдущие значения будут переопределены, так как вы уже получаете массив заметок, вы можете сделать одну вещь, сохранитьсписок массивов в новом ArrayList и обновите отредактированное значение этого индекса, из которого вы получаете Notes, конвертируйте новый arrayList с помощью Gson и сохраните его в общих настройках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...