SQLite的不Tabhost工作 - Android电子 [英] SQLite not working with Tabhost - Android

查看:136
本文介绍了SQLite的不Tabhost工作 - Android电子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在玩弄SQLite的一点点,我一直在寻找如何创建标签。我使用的是从 http://developer.android.com/resources记事本示例/tutorials/notepad/index.html 并取得3个标签使用它。问题是,SQLite是不是能够拿起什么是在edittexts当我保存的值。当我尝试在我的历史标签来查看它们,它只显示我之前我做的标签,我救了旧值。当我点击之前,我做的标签,我已经保存的文档,它需要我的活动,没有标签的顶部,然后我居然能更新。因此,现在看来似乎是无法得到的是在edittexts当标签处于顶部,但能当它是它自己的布局。

这有什么创建标签时我失踪?

这是我在第一个选项卡至今:

 私人的EditText etVelocity;
私人的EditText etType;
私人长期mRowId;@覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.new_entry);    etVelocity =(EditText上)findViewById(R.id.etVelocity);
    etType =(EditText上)findViewById(R.id.etType);    按钮BSAVE =(按钮)findViewById(R.id.btnSave);
    按钮bReset =(按钮)findViewById(R.id.btnReset);    mRowId = NULL;
    捆绑额外= getIntent()getExtras()。    如果(临时演员!= NULL)
    {
        字符串title = extras.getString(DbAdapter.KEY_TITLE);
        绳体= extras.getString(DbAdapter.KEY_BODY);
        mRowId = extras.getLong(DbAdapter.KEY_ROWID);        如果(标题!= NULL)
        {
            etVelocity.setText(职称);
        }        如果(身体!= NULL)
        {
            etType.setText(体);
        }
    }    bSave.setOnClickListener(新View.OnClickListener()
    {        公共无效的onClick(查看视图)
        {
            束束=新包();            bundle.putString(DbAdapter.KEY_TITLE,etVelocity.getText()的toString());
            bundle.putString(DbAdapter.KEY_BODY,etType.getText()的toString());            如果(mRowId!= NULL)
            {
                bundle.putLong(DbAdapter.KEY_ROWID,mRowId);
            }            意图mIntent =新的Intent();
            mIntent.putExtras(包);
            的setResult(RESULT_OK,mIntent);
            完();
        }    });    bReset.setOnClickListener(新View.OnClickListener()
    {        @覆盖
        公共无效的onClick(视图v)
        {
            // TODO自动生成方法存根
            resetDisplay();
        }
    });
}公共无效resetDisplay()
{
    etVelocity.setText();
    etType.setText();
}

显示条目

历史选项卡:

 私有静态最终诠释ACTIVITY_CREATE = 0;
私有静态最终诠释ACTIVITY_EDIT = 1;私有静态最终诠释INSERT_ID = Menu.FIRST;
私有静态最终诠释DELETE_ID = Menu.FIRST + 1;私人DbAdapter mDbHelper;
私人光标mNotesCursor;/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.notes_list);
    mDbHelper =新DbAdapter(本);
    mDbHelper.open();
    fillData();
    registerForContextMenu(getListView());
}私人无效fillData(){
    //获取所有从数据库中的行,并创建项目列表
    mNotesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(mNotesCursor);    //创建一个数组来指定,我们要在列表中显示的字段(仅TITLE)
    的String [] =由新的String [] {} DbAdapter.KEY_TITLE;    //我们希望这些字段绑定到域的阵列(在此情况下,仅有文本1)
    INT []为= INT新[] {} R.id.text1;    //现在创建一个简单的游标适配器,并将其设置为显示
    SimpleCursorAdapter指出=
        新SimpleCursorAdapter(这一点,R.layout.notes_row,mNotesCursor,从,到);
    setListAdapter(注);
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    super.onCreateOptionsMenu(菜单);
    menu.add(0,INSERT_ID,0,R.string.menu_insert);
    返回true;
}@覆盖
公共布尔onMenuItemSelected(INT FEATUREID,菜单项项){
    开关(item.getItemId()){
        案例INSERT_ID:
            createNote();
            返回true;
    }    返回super.onMenuItemSelected(FEATUREID,项目);
}@覆盖
公共无效onCreateContextMenu(文本菜单菜单视图V,
        ContextMenuInfo menuInfo){
    super.onCreateContextMenu(菜单,V,menuInfo);
    menu.add(0,DELETE_ID,0,R.string.menu_delete);
}@覆盖
公共布尔onContextItemSelected(菜单项项){
    开关(item.getItemId()){
        案例DELETE_ID:
            AdapterContextMenuInfo信息=(AdapterContextMenuInfo)item.getMenuInfo();
            mDbHelper.deleteNote(info.id);
            fillData();
            返回true;
    }
    返回super.onContextItemSelected(项目);
}私人无效createNote(){
    意图I =新意图(这一点,Tab1.class);
    startActivityForResult(ⅰ,ACTIVITY_CREATE);
}@覆盖
保护无效onListItemClick(ListView中升,视图V,INT位置,长的id){
    super.onListItemClick(L,V,位置ID);
    光标C = mNotesCursor;
    c.moveToPosition(位置);
    意图I =新意图(这一点,Tab1.class);
    i.putExtra(DbAdapter.KEY_ROWID,身份证);
    i.putExtra(DbAdapter.KEY_TITLE,c.getString(
            c.getColumnIndexOrThrow(DbAdapter.KEY_TITLE)));
    i.putExtra(DbAdapter.KEY_BODY,c.getString(
            c.getColumnIndexOrThrow(DbAdapter.KEY_BODY)));
    startActivityForResult(ⅰ,ACTIVITY_EDIT);
}@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图意图){
    super.onActivityResult(要求code,结果code,意向);
    捆绑额外= intent.getExtras();
    开关(要求code){
        案例ACTIVITY_CREATE:
            字符串title = extras.getString(DbAdapter.KEY_TITLE);
            绳体= extras.getString(DbAdapter.KEY_BODY);
            mDbHelper.createNote(标题,正文);
            fillData();
            打破;
        案例ACTIVITY_EDIT:
            龙ROWID = extras.getLong(DbAdapter.KEY_ROWID);
            如果(ROWID!= NULL){
                字符串editTitle = extras.getString(DbAdapter.KEY_TITLE);
                字符串editBody = extras.getString(DbAdapter.KEY_BODY);
                mDbHelper.updateNote(ROWID,editTitle,editBody);
            }
            fillData();
            打破;
    }
}

DbAdapter类:

 公共静态最后弦乐KEY_TITLE =称号;
公共静态最后弦乐KEY_BODY =身体;
公共静态最后弦乐KEY_ROWID =_id;私有静态最后弦乐TAG =NotesDbAdapter;
私人DatabaseHelper mDbHelper;
私人SQLiteDatabase MDB;私有静态最后弦乐DATABASE_CREATE =
    创建表的说明(_id整数主键自动增量
    +标题文本不为空,正文不是null);;私有静态最后弦乐DATABASE_NAME =数据;
私有静态最后弦乐DATABASE_TABLE =注意事项;
私有静态最终诠释DATABASE_VERSION = 2;私人最终上下文mCtx;私有静态类DatabaseHelper扩展SQLiteOpenHelper {    DatabaseHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){        db.execSQL(DATABASE_CREATE);
    }    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        Log.w(TAG,从版本升级数据库+ oldVersion +到
                + NEWVERSION +,这将摧毁所有旧数据);
        db.execSQL(DROP TABLE IF EXISTS笔记);
        的onCreate(DB);
    }
}公共DbAdapter(上下文CTX){
    this.mCtx = CTX;
}公共DbAdapter的open()抛出的SQLException {
    mDbHelper =新DatabaseHelper(mCtx);
    MDB = mDbHelper.getWritableDatabase();
    返回此;
}公共无效的close(){
    mDbHelper.close();
}众长createNote(标题字符串,字符串体){
    ContentValues​​ initialValues​​ =新ContentValues​​();
    initialValues​​.put(KEY_TITLE,职称);
    initialValues​​.put(KEY_BODY,体);    返回mDb.insert(DATABASE_TABLE,空,initialValues​​);
}公共布尔deleteNote(长ROWID){    返回mDb.delete(DATABASE_TABLE,KEY_ROWID +=+ ROWID,NULL)> 0;
}公共光标fetchAllNotes(){    返回mDb.query(DATABASE_TABLE,新的String [] {KEY_ROWID,KEY_TITLE,
            KEY_BODY},NULL,NULL,NULL,NULL,NULL);
}公共光标fetchNote(长ROWID)抛出的SQLException {    光标mCursor = mDb.query(真,DATABASE_TABLE,新的String [] {KEY_ROWID,
                KEY_TITLE,KEY_BODY},KEY_ROWID +=+ ROWID,空,
                NULL,NULL,NULL,NULL);
    如果(mCursor!= NULL){
        mCursor.moveToFirst();
    }
    返回mCursor;}公共布尔updateNote(长ROWID,标题字符串,字符串体){
    ContentValues​​ ARGS =新ContentValues​​();
    args.put(KEY_TITLE,职称);
    args.put(KEY_BODY,体);    返回mDb.update(DATABASE_TABLE,ARGS,KEY_ROWID +=+ ROWID,NULL)> 0;
}


解决方案

我想通了,如何解决这个问题。我增加了以下code。在TAB1类:

私人DbAdapter mDbHelper;

,然后加入这个在onCreate方法

  mDbHelper =新DbAdapter(本);
mDbHelper.open();

最后ereased所有的东西onClick的方法,并把在:

 字符串速度= etVelocity.getText()的toString()。
字符串类型= etType.getText()的toString()。
mDbHelper.createNote(速度型);

另外要关闭数据库,我创建的onDestroy方法和名为

  mDbHelper.close();

I have been playing around with SQLite a little bit and I was looking at how to create tabs. I'm using the notepad example from http://developer.android.com/resources/tutorials/notepad/index.html and made 3 tabs working with it. The problem is that sqlite isn't able to pick up what is in the edittexts when I save the values. When I try to view them in my history tab, it only displays my old values which I had saved before I made the tabs. When I click on the ones which I had saved before I made the tabs, it takes me to the activity, WITHOUT the tabs at the top and then I'm actually able to update it. So, it seems like it's not able to get what is in the edittexts when the tabs are at the top, but is able to when it's a layout on it's own.

Is there anything that I'm missing when creating the tabs?

This what I have so far in first tab:

private EditText etVelocity;
private EditText etType;
private Long mRowId;

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

    etVelocity = (EditText) findViewById(R.id.etVelocity);
    etType = (EditText) findViewById(R.id.etType);

    Button bSave = (Button) findViewById(R.id.btnSave);
    Button bReset = (Button) findViewById(R.id.btnReset);

    mRowId = null;
    Bundle extras = getIntent().getExtras();

    if (extras != null)
    {
        String title = extras.getString(DbAdapter.KEY_TITLE);
        String body = extras.getString(DbAdapter.KEY_BODY);
        mRowId = extras.getLong(DbAdapter.KEY_ROWID);

        if (title != null)
        {
            etVelocity.setText(title);
        }

        if (body != null)
        {
            etType.setText(body);
        }
    }

    bSave.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View view)
        {
            Bundle bundle = new Bundle();

            bundle.putString(DbAdapter.KEY_TITLE, etVelocity.getText().toString());
            bundle.putString(DbAdapter.KEY_BODY, etType.getText().toString());

            if (mRowId != null)
            {
                bundle.putLong(DbAdapter.KEY_ROWID, mRowId);
            }

            Intent mIntent = new Intent();
            mIntent.putExtras(bundle);
            setResult(RESULT_OK, mIntent);
            finish();
        }

    });

    bReset.setOnClickListener(new View.OnClickListener()
    {

        @Override
        public void onClick(View v)
        {
            // TODO Auto-generated method stub
            resetDisplay();
        }
    });
}

public void resetDisplay()
{
    etVelocity.setText("");
    etType.setText("");
}

History tab that displays entries:

private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;

private static final int INSERT_ID = Menu.FIRST;
private static final int DELETE_ID = Menu.FIRST + 1;

private DbAdapter mDbHelper;
private Cursor mNotesCursor;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.notes_list);
    mDbHelper = new DbAdapter(this);
    mDbHelper.open();
    fillData();
    registerForContextMenu(getListView());
}

private void fillData() {
    // Get all of the rows from the database and create the item list
    mNotesCursor = mDbHelper.fetchAllNotes();
    startManagingCursor(mNotesCursor);

    // Create an array to specify the fields we want to display in the list (only TITLE)
    String[] from = new String[]{DbAdapter.KEY_TITLE};

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{R.id.text1};

    // Now create a simple cursor adapter and set it to display
    SimpleCursorAdapter notes = 
        new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to);
    setListAdapter(notes);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, INSERT_ID, 0, R.string.menu_insert);
    return true;
}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    switch(item.getItemId()) {
        case INSERT_ID:
            createNote();
            return true;
    }

    return super.onMenuItemSelected(featureId, item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, DELETE_ID, 0, R.string.menu_delete);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case DELETE_ID:
            AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
            mDbHelper.deleteNote(info.id);
            fillData();
            return true;
    }
    return super.onContextItemSelected(item);
}

private void createNote() {
    Intent i = new Intent(this, Tab1.class);
    startActivityForResult(i, ACTIVITY_CREATE);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Cursor c = mNotesCursor;
    c.moveToPosition(position);
    Intent i = new Intent(this, Tab1.class);
    i.putExtra(DbAdapter.KEY_ROWID, id);
    i.putExtra(DbAdapter.KEY_TITLE, c.getString(
            c.getColumnIndexOrThrow(DbAdapter.KEY_TITLE)));
    i.putExtra(DbAdapter.KEY_BODY, c.getString(
            c.getColumnIndexOrThrow(DbAdapter.KEY_BODY)));
    startActivityForResult(i, ACTIVITY_EDIT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Bundle extras = intent.getExtras();
    switch(requestCode) {
        case ACTIVITY_CREATE:
            String title = extras.getString(DbAdapter.KEY_TITLE);
            String body = extras.getString(DbAdapter.KEY_BODY);
            mDbHelper.createNote(title, body);
            fillData();
            break;
        case ACTIVITY_EDIT:
            Long rowId = extras.getLong(DbAdapter.KEY_ROWID);
            if (rowId != null) {
                String editTitle = extras.getString(DbAdapter.KEY_TITLE);
                String editBody = extras.getString(DbAdapter.KEY_BODY);
                mDbHelper.updateNote(rowId, editTitle, editBody);
            }
            fillData();
            break;
    }
}

DbAdapter Class:

public static final String KEY_TITLE = "title";
public static final String KEY_BODY = "body";
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 DbAdapter(Context ctx) {
    this.mCtx = ctx;
}

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

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

public long createNote(String title, String body) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_BODY, body);

    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_TITLE,
            KEY_BODY}, null, null, null, null, null);
}

public Cursor fetchNote(long rowId) throws SQLException {

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

}

public boolean updateNote(long rowId, String title, String body) {
    ContentValues args = new ContentValues();
    args.put(KEY_TITLE, title);
    args.put(KEY_BODY, body);

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

解决方案

I figured out how to fix this problem. I added the following code in the Tab1 class:

private DbAdapter mDbHelper;

and then added this in the onCreate method

mDbHelper = new DbAdapter(this);
mDbHelper.open();

And finally ereased everything out of the onClick method and put in:

String velocity = etVelocity.getText().toString();
String type = etType.getText().toString();
mDbHelper.createNote(velocity, type);

Also to close the database I created onDestroy method and called

mDbHelper.close();

这篇关于SQLite的不Tabhost工作 - Android电子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆