2011-03-20 85 views
0

嗨,我是一個搜索引擎優化,我目前正在練習我自己的Android開發。我研究了在android開發人員站點中存儲數據庫,並找到了一個記事本中的示例代碼。在Android數據庫中的問題

我試過在我的項目中使用它。在我的項目中,我已經放置了2個帶有OK按鈕的編輯框,點擊OK按鈕後,編輯框中的數據被存儲並顯示在一個新頁面中。

下面是我的項目的主類文件的代碼,

{ 

    b = (Button)findViewById(R.id.widget30); 

    et1 = (EditText)findViewById(R.id.et1); 
    et2 = (EditText)findViewById(R.id.et2); 

    Bundle extras = getIntent().getExtras(); 
    if (extras != null) { 
     String title = extras.getString(NotesDbAdapter.KEY_ET1); 
     String body = extras.getString(NotesDbAdapter.KEY_ET2); 
     mRowId = extras.getLong(NotesDbAdapter.KEY_ROWID); 

     if (title != null) { 
      et1.setText(title); 
     } 
     if (body != null) { 
      et2.setText(body); 
     } 
    } 

    b.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      if(et1.getText().toString().length() == 0 && et2.getText().toString().length() == 0) 
      { 
       et.setVisibility(View.VISIBLE); 
       alertbox(); 
      } 
      else 
      { 
      main.this.finish(); 
      Intent myIntent = new Intent(v.getContext(), T.class); 
      startActivityForResult(myIntent, 0); 
      } 
     }    
    }); 
} 


public void alertbox() 
{ 
    et = new TextView(this); 
    Builder alert =new AlertDialog.Builder(main.this); 
    alert.setTitle("Alert"); 
    alert.setMessage("Required all fields"); 
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int whichButton) 
     { 
      dialog.cancel(); 
     } 
    }); 
    AlertDialog alert1 = alert.create(); 
    alert1.show(); 
} 

} 

以下是的DataBaseAdapter

public class NotesDbAdapter { 

    public static final String KEY_ET1 = "a"; 
    public static final String KEY_ET2 = "b"; 
    public static final String KEY_ROWID = "_id"; 

    private static final String TAG = "NotesDbAdapter"; 
    private DatabaseHelper mDbHelper; 
    private SQLiteDatabase mDb; 
    private static final String DATABASE_CREATE = 
     "create table notes (_id integer primary key autoincrement, " 
     + "title text not null, body text not null);"; 

    private static final String DATABASE_NAME = "data"; 
    private static final String DATABASE_TABLE = "notes"; 
    private static final int DATABASE_VERSION = 2; 

    private final Context mCtx; 

    private static class DatabaseHelper extends SQLiteOpenHelper { 

     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 

      db.execSQL(DATABASE_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS notes"); 
      onCreate(db); 
     } 
    } 


    public NotesDbAdapter(Context ctx) { 
     this.mCtx = ctx; 
    } 


    public NotesDbAdapter open() throws SQLException { 
     mDbHelper = new DatabaseHelper(mCtx); 
     mDb = mDbHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     mDbHelper.close(); 
    } 



    public long createNote(String a, String b) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_ET1, a); 
     initialValues.put(KEY_ET2, b); 

     return mDb.insert(DATABASE_TABLE, null, initialValues); 
    } 


    public boolean deleteNote(long rowId) { 

     return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
    } 


    public Cursor fetchAllNotes() { 

     return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_ET1, 
       KEY_ET2}, null, null, null, null, null); 
    } 


    public Cursor fetchNote(long rowId) throws SQLException { 

     Cursor mCursor = 

      mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
        KEY_ET1, KEY_ET2}, KEY_ROWID + "=" + rowId, null, 
        null, null, null, null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 

    } 


    public boolean updateNote(long rowId, String a, String b) { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_ET1, a); 
     args.put(KEY_ET2, b); 

     return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
    } 
} 

代碼當我運行該項目的新頁面打開,但輸入的數據沒有顯示在那裏。

什麼是錯誤。請教我

+0

點擊按鈕後,你想開始新的活動,顯示數據添加到數據庫?另外我看不到在按鈕onClick事件中向數據庫添加數據。 – 2011-03-20 09:04:21

+0

我可以知道該怎麼做.... – Guru 2011-03-20 13:02:41

回答

1

你將需要得到你的數據庫適配器的情況下

NotesDbAdapter adapter = new NotesDbAdapter(this); //pass activity context as a param 

,那麼你需要使用新的數據庫對象的open方法來打開數據庫

adapter.open(); 

現在打電話商店的方法

String str = myEditText.getText().toString(); 
String str1 = "random other string"; 
adapter.createNote(str, str1); 

我注意到你的createNote方法需要兩個參數。我不知道你想從哪裏得到其他數據,所以我只是用'隨機其他字符串'。在您想要存儲的數據中適當地輸入Sub。

最後,您將需要關閉數據庫:

adapter.close(); 

您已成功存儲的信息。有關如何使用控制檯查看您輸入到數據庫中的數據的幫助,請參閱this。 (具體請參閱頁面的sqlite3部分)或者,您可以編寫一些代碼,以便在檢索後將其顯示在屏幕上。如果你想檢索信息,你將需要閱讀遊標。有關這方面的一些信息,請參閱here