2012-07-18 5 views
0

저는 현재 간단한 Android 데이터베이스 데이터베이스 프로그램을 만들고 있습니다. 첫 번째 활동은 작동하지만 편집 텍스트에 입력 한 텍스트는 저장하지 않습니다. 여기SQLDatabase는 문자열을 저장하지 않습니다

public class DatabaseFinalActivity extends Activity { 
    NoteAdapter adapter=null; 
    NoteHelper helper=null; 
    Cursor dataset_cursor=null; 
    EditText editNote=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try 
     { 
      setContentView(R.layout.main); 
      ListView list=(ListView)findViewById(R.id.listView1); 
      editNote = (EditText)findViewById(R.id.editText1); 

      helper=new NoteHelper(this); 
      dataset_cursor=helper.getAll(); 
      startManagingCursor(dataset_cursor); 
      adapter=new NoteAdapter(dataset_cursor); 
      list.setAdapter(adapter); 

      Button btn = (Button) findViewById(R.id.button1); 
      btn.setOnClickListener(onSave); 
     } 
     catch(Exception e) { 
      Log.e("Error", "Error in code: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     helper.close(); 
    } 

    private View.OnClickListener onSave=new View.OnClickListener() { 
     public void onClick(View v){ 
      helper.insert(editNote.getText().toString()); 
      dataset_cursor.requery(); 
      editNote.setText(""); 
     } 
    }; 

    class NoteAdapter extends CursorAdapter { 
     NoteAdapter(Cursor c) { 
      super(DatabaseFinalActivity.this, c); 
     } 

     @Override 
     public void bindView(View row, Context ctxt, Cursor c) 
     { 
      NoteHolder holder=(NoteHolder)row.getTag(); 
      holder.populateFrom(c, helper); 
     } 

     @Override 
     public View newView(Context ctxt, Cursor c, ViewGroup parent) { 
      LayoutInflater inflater=getLayoutInflater(); 
      View row=inflater.inflate(R.layout.row, parent, false); 
      NoteHolder holder=new NoteHolder(row); 

      row.setTag(holder); 
      return(row); 
     } 
    } 

    static class NoteHolder { 
     private TextView noteText=null; 
     NoteHolder(View row){ 
      noteText=(TextView)row.findViewById(R.id.textView1); 
     } 

     void populateFrom(Cursor c, NoteHelper helper) { 
      noteText.setText(helper.getNote(c)); 
     } 
    } 
} 

그리고 내 도우미 :

public class NoteHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME="note.db"; 
    private static final int SCHEMA_VERSION=1; 

    public NoteHelper(Context context) { 
     super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE NOTES (_id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int OldVersion, int NewVersion) { 
    } 

    public void insert (String note) { 
     ContentValues cv=new ContentValues(); 
     cv.put("note", note); 
     getWritableDatabase().insert("Notes", "note", cv); 
    } 

    public Cursor getAll() { 
     return(getReadableDatabase().rawQuery("SELECT_id, note FROM notes", null)); 
    } 

    public String getNote(Cursor c) { 
     return(c.getString(1)); 
    } 
} 

과 내가 문제가 매니페스트에 있음을 의심 여기 내 코드입니다. 내 매니페스트는 여기

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="database.fli.one" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

     <activity 
      android:name=".DatabaseFinalActivity" 
      android:label="@string/app_name" > 
     </activity> 
    </application> 

</manifest> 

미리 의견을 보내 주셔서 감사합니다.

+0

내가 너라면, 더 많은 로그 호출을 삽입하려고 했으므로 작성한 모든 메소드가 제대로 호출 될 수 있습니다. DB 파일 (note.db)이 올바르게 작성 되었습니까? 두 개의 필드가있는 "메모"표가 포함되어 있습니까? 맨 위의 매니페스트 파일은 정상적으로 보입니다. – Shine

답변

0

문제는 간단하다,이를 변경 :

getWritableDatabase().insert("Notes", "note", cv); 

을이 사람 :

getWritableDatabase().insert("Notes", null, cv); 

SQLiteDatabase.insert()의 중간 매개 변수를 전달하여 데이터베이스에 널 (null)/빈 행을 삽입 해결 방법입니다 note 컬럼에 Content.com에있는 내용 중 에 관계없이과 관계없이이 열이 null이 될 것이라고 데이터베이스에 알 렸습니다.

요약하면 데이터베이스에 빈 행을 입력하라고 지시했습니다. 대신 null을 사용하십시오.

+0

대단히 감사합니다! 시도해 볼게. ^^ –

관련 문제