Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从sqlite数据库中逐个获取行并显示在编辑文本框中_Android - Fatal编程技术网

Android 如何从sqlite数据库中逐个获取行并显示在编辑文本框中

Android 如何从sqlite数据库中逐个获取行并显示在编辑文本框中,android,Android,我通过这么多的链接,诚实地努力得到我的答案,但仍然混乱。(可能是重复的问题)。我成功地在Sqlitedatabase中插入了几行。我需要在Next和Previous按钮上显示EditText中的每一行。 下面是我的代码 public List<Contact> getAllContacts() { List<Contact> contactList = new ArrayList<Contact>(); // Select Al

我通过这么多的链接,诚实地努力得到我的答案,但仍然混乱。(可能是重复的问题)。我成功地在Sqlitedatabase中插入了几行。我需要在
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)