从SQLite数据库中获取信息:填写已填充的字段并更新行

时间:2011-01-25 09:39:13

标签: android sqlite android-intent

检查了很多其他问题和网站,无法真正找到我想要的东西。我正在为练习制作联系人列表......我想要做的是让用户能够更新联系人的信息。当他们点击某个联系人时,这些字段应该按原样填写,而不是带有提示的空白。现在的问题是没有填充字段,其他所有字段都可以正常工作,但所有字段只有提示而不是用户在创建时填写的联系人文本。这是代码:

ContacList.class的代码......

@Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        mDbAdapter = new TagDBAdapter(this);
        mDbAdapter.open();
        Cursor cursor = mCursor;
        cursor.moveToPosition(position);
        Intent intent = new Intent(this, AddEditContact.class);
        intent.putExtra(TagDBAdapter.KEY_ROWID, id);
        startActivityForResult(intent, ACTIVITY_EDIT);
    }

AddEditContact.class的代码

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.initLayout();
        mDbAdapter = new TagDBAdapter(this);
        mDbAdapter.open();
        Bundle extras = getIntent().getExtras();
        mRowId = extras.getLong(TagDBAdapter.KEY_ROWID);
        if(mRowId != null) {
            mContact = mDbAdapter.fetchContact(mRowId);
            m_firstNameEditE.setText(mContact.getFirstName());
            m_lastNameEditE.setText(mContact.getLastName());
            m_phoneNumberEdit.setText(mContact.getPhoneNumber());
            m_emailEditE.setText(mContact.getEmail());
            m_homePhoneEditE.setText(mContact.getHomePhone());
            m_workPhoneEditE.setText(mContact.getWorkPhone());
        }
    }

获取联系人代码

以下是fetchContact()

的代码
public Contact fetchContact(long rowId) throws SQLException {
        Contact contact = new Contact();
        Cursor mCursor = 
            mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_FIRSTNAME, KEY_LASTNAME, KEY_NAME, KEY_NUMBER, 
                    KEY_EMAIL, KEY_HOMEPHONE, KEY_WORKPHONE}, KEY_ROWID + "=" + rowId, null, null, null, null, null);
        if(mCursor != null) {
            mCursor.moveToFirst();
        }
        while(mCursor.moveToNext()) {
            contact.setFirstName(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_FIRSTNAME)));
            contact.setLastName(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_LASTNAME)));
            contact.setName(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_NAME)));
            contact.setPhoneNumber(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_NUMBER)));
            contact.setEmail(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_EMAIL)));
            contact.setHomePhone(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_HOMEPHONE)));
            contact.setWorkPhone(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_WORKPHONE)));
        }
        return contact;
    }

所以我从intent获取额外内容并获取KEY_ROWID,如果它不为null,则将EditTexts的文本设置为我从fetchContact(long rowId)类获取的联系对象的getter,返回一个Contact对象。然后我将所有EditTexts设置为各自的getter。但是在行动中,就像我说的那样,它只是将所有字段留空,只有一个提示。

这里有什么我想念的吗?非常感谢。

我想到的一个潜在问题是我有两个意图要求这个活动的结果,一个用于ACTIVITY_CREATE,一个用于ACTIVITY_EDIT。也许它得到了错误的意图。

1 个答案:

答案 0 :(得分:0)

您是否尝试过调试或至少在代码中放入一些 Log.d()来打印出值?

您的mDbAdapter是否由您撰写?也许 fetchContact()

有问题