Android 如何从sqlite数据库中逐个获取行并显示在编辑文本框中
我通过这么多的链接,诚实地努力得到我的答案,但仍然混乱。(可能是重复的问题)。我成功地在Sqlitedatabase中插入了几行。我需要在Android 如何从sqlite数据库中逐个获取行并显示在编辑文本框中,android,Android,我通过这么多的链接,诚实地努力得到我的答案,但仍然混乱。(可能是重复的问题)。我成功地在Sqlitedatabase中插入了几行。我需要在Next和Previous按钮上显示EditText中的每一行。 下面是我的代码 public List<Contact> getAllContacts() { List<Contact> contactList = new ArrayList<Contact>(); // Select Al
Next
和Previous
按钮上显示EditText中的每一行。
下面是我的代码
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
cursor = db.rawQuery(selectQuery, null);
{
do{
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
contactList.add(contact);
}while(cursor.moveToNext());
cursor.moveToFirst();
cursor.close();
}
return contactList;
}
公共列表getAllContacts(){
List contactList=new ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表格\联系人;
SQLiteDatabase db=this.getWritableDatabase();
cursor=db.rawQuery(selectQuery,null);
{
做{
触点=新触点();
setID(Integer.parseInt(cursor.getString(0));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
联系人列表。添加(联系人);
}while(cursor.moveToNext());
cursor.moveToFirst();
cursor.close();
}
返回联系人列表;
}
游标有特定的行为,它们在第一个结果之前开始。 因此,在做任何事情之前,您必须
moveToFirst
:
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
cursor = db.rawQuery(selectQuery, null);
{
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
contactList.add(contact);
} while (cursor.moveToNext());
}
cursor.close();
}
return contactList;
}
您的代码:按钮clicacivity为 show.setOnClickListener(新的OnClickListener(){ 然后,当您单击“上一步”按钮时,它会显示上一步(如果没有上一步)联系人数据。当您单击“下一步”按钮时,它会显示下一步(如果没有下一步,则显示最后一步)联系人数据 数学用法说明:
如果我有两个联系人,可用的索引是
0
和1
index = Math.max(index, 0) => So it is never < 0 (0, the first index)
V
index = Math.min(index, contacts.size() - 1) => So it is never > (2 - 1) = 1 (1, the last index)
index=Math.max(index,0)=>所以它永远不会<0(0,第一个索引)
v
index=Math.min(index,contacts.size()-1)=>所以它永远不会>(2-1)=1(1,最后一个索引)
这可以防止在
索引中没有元素的列表
中获取元素时抛出OutOfBoundsException
。它只返回最后一条记录。我需要第一条记录在第一时间,然后是下一条。有没有办法给光标位置第一行,以及当用户下次单击它的mo时ve到第二行并仅返回第二条记录,依此类推..?在哪个变量中获得最后一条记录?在我的MainActivity中,我有一个名为show的按钮。单击按钮时,我将返回值存储在List contacts=db.getAllContacts()中;通过为每个循环设置行值后,我在EditText中设置了行值。我想我理解了这个问题。你能将click方法代码添加到问题中,这样我们就可以解决它吗?Hi@Gorcyn,看起来它会很好地工作。但是我无法处理异常。你能修改你的代码来处理异常吗?请解释index=Math.min的作用是什么(Math.max(index,0),contacts.size()-1);非常感谢您的快速响应。请提供更多帮助。谢谢
@Override
public void onClick(View v) {
List<Contact> contacts = db.getAllContacts();
for (Contact cn : contacts)
{
String log = "Id: "+cn.getID()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getPhoneNumber();
edit_name.setText(cn.getName());
edit_phon.setText(cn.getPhoneNumber());
}
}
});
int index = 0;
@Override
public void onClick(View v) {
if (v.getId() == R.id.previous) { // android:id="@+id/previous" on the "Previous" button
index--;
}
else if (v.getId() == R.id.next) { // android:id="@+id/next" on the "Next" button
index++;
}
List<Contact> contacts = getAllContacts();
// Prevent out of bounds
index = Math.min(Math.max(index, 0), contacts.size() - 1);
// Fill `EditText`s with contact data
Contact contact = contacts.get(index);
edit_name.setText(cn.getName());
edit_phon.setText(cn.getPhoneNumber());
}
index = Math.max(index, 0) => So it is never < 0 (0, the first index)
V
index = Math.min(index, contacts.size() - 1) => So it is never > (2 - 1) = 1 (1, the last index)