2016-06-30 8 views
0

SQLiteデータベースでメモを編集して保存しようとしています。しかし、配列項目Akhilesh Chobeyを編集して、戻るキーを押すと、次のことが起こります。アプリケーションの再起動時にそのどれも保存されません。Android SQLite:アプリケーションの曖昧な動作

enter image description here

MainActivity:(編集注)

public class MainActivity extends AppCompatActivity { 

ListView notesListView; 
static ArrayList<String> notesArrayList; 
static 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>(); 

    if(Main2Activity.myDb != null) { 
     notesArrayList.clear(); 
     Cursor res = Main2Activity.myDb.getData(); 
     if (res.getCount() == 0) { 
      Log.i("Error", "error"); 
      return; 
     } 

     while (res.moveToNext()) { 
      notesArrayList.add(String.valueOf(res)); 
     } 
    } 

    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 { 

static DatabaseOperations myDb; 
EditText editNote; 
int position; 

@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(); 
    position = intent.getIntExtra("notePosition", -1); 
    if(position != -1){ 

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

    } 
    editNote.addTextChangedListener(this); 
} 

@Override 
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

} 

@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(); 
    } 
} 

データベースのヘルパークラス:

public class DatabaseOperations extends SQLiteOpenHelper { 

public static final String DatabaseName = "notes.db"; 
public static final String TableName = "notes"; 
public static final String Col1 = "text"; 

public DatabaseOperations(Context context) { 
    super(context, DatabaseName, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table " + TableName + " (text TEXT PRIMARY KEY AUTOINCREMENT) "); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int i, int i1) { 

    db.execSQL("DROP TABLE IF EXISTS " + TableName); 
    onCreate(db); 

} 

public boolean insertData(String note){ 

    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(Col1, note); 

    long result = db.insert(TableName, null, contentValues); 
    if(result == -1){ 
     return false; 
    }else { 
     return true; 
    } 
} 

public Cursor getData(){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor result = db.rawQuery("select * from " + TableName, null); 
    return result; 
} 
} 
+1

*アプリケーションの曖昧な動作*なぜ "曖昧"ですか?あなたがコードで書いたものとまったく同じです... 'String.valueOf(res)'これはCursorからデータを取得する方法ではありません... – Selvin

+0

しかし、なぜ値を保存しないのですか?アプリの次のインスタンスでは、すべてが消え、「Akhilesh Chobey」だけが表示されます。 –

答えて

1

あなたの間違いがありますあなたが使っているもの

String.valueOf(res) 

これは間違っています。 代わりにres.getString(res.getColumnIndex("text"))を使用してください。

メソッドは、Stringタイプの値を取得するように指示します。getColumnIndexは、カラム名を指定してカラムインデックスを返します。あなたの場合、あなたのスキーマにtextという名前の列が1つしかありません。

詳細については、Cursorのドキュメントを参照してください。

+0

ありがとうございます@ Vektor88 –