2011-03-20 50 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