2016-06-30 4 views
0

Я пытаюсь сохранить элемент списка постоянно при обновлении. У меня есть два вида деятельности: MainActivity.java и Main2Activity.java (операция EditText) и класс DatabaseOperations. Когда я редактирую примечание к примеру, он обновляется в MainActivity.java. Однако при закрытии приложения и его повторении примечание возвращается к прежнему состоянию и не сохраняется.ArrayList не сохраняется в базе данных

MainActivity:

public class MainActivity extends AppCompatActivity { 

ListView notesListView; 
static ArrayList<String> notesArrayList; 
ArrayAdapter<String> adapter; 

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

    notesListView = (ListView) findViewById(R.id.notesListView); 
    notesArrayList = new ArrayList<String>(); 
    notesArrayList.add("Akhilesh Chobey"); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, notesArrayList); 
    notesListView.setAdapter(adapter); 

    notesListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      Intent intent = new Intent(getApplicationContext(), Main2Activity.class); 
      intent.putExtra("notePosition", i); 
      startActivity(intent); 
     } 
    }); 

} 
} 

Main2Activity:

public class Main2Activity extends AppCompatActivity implements TextWatcher { 

DatabaseOperations myDB; 
EditText editNote; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    editNote = (EditText) findViewById(R.id.noteEditText); 

    myDb = new DatabaseOperations(Main2Activity.this); 

    Intent intent = getIntent(); 
    int position = intent.getIntExtra("notePosition", -1); 
    if(position != -1){ 

    editNote.setText(MainActivity.notesArrayList.get(position)); 

} 
editNote.addTextChangedListener(this); 
} 

@Override 
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
    if (myDb != null){ 
    boolean isInserted = myDB.insertData(editNote.getText().toString()); 
     if(isInserted){ 
      Toast.makeText(getApplicationContext(), "Inserted", Toast.LENGTH_SHORT).show(); 
     }else { 
      Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show(); 
    } 
     MainActivity.notesArrayList.set(position, String.valueOf(charSequence)); 
     MainActivity.adapter.notifyDataSetChanged(); 

} 
} 
+0

Возможный дубликат [Android - NullPointerException: storage == null] (http://stackoverflow.com/questions/29939760/android-nullpointerexception-storage-null) –

+0

Вы получаете тост «Вставленный» при редактировании заметки от Main2Activity ?? – sJy

+0

@sJy Да, я получаю «Вставленный» тост –

ответ

0

Ну вы получили опечатка там ваши только сохранение в базе данных является нулевым if (myDB == null) изменения, которые в if (myDB != null). В противном случае код, сохраняющий его в БД, не будет выполнен.

0

В MainActivity вы всегда создаете новый ArrayList со значением «Akhilesh Chobey». Это значение передается каждый раз, когда ваш Main2Activity & устанавливается в EditText.

Решение - В разделе «Основная информация» перед добавлением «Akhilesh Chobey» проверьте, есть ли в базе данных существующие данные. Если данные присутствуют, добавьте это в arraylist OR, если нет, добавьте «Akhilesh Chobey».

+0

см. Код insertData в onTextChanged прослушиватель. Поэтому я думаю, что каждый раз, когда он не будет вставлять то же значение «Akhilesh Chobey :. Right? – Mani

+0

editNote.setText (MainActivity.notesArrayList.get (position)) будет вызывать прослушиватель onTextChanged. – sJy

+0

Он просто вызывается только во время onCreate. будет вызван каждый раз для каждого действия клавиатуры. – Mani