ListView来自android中的Sqlite

Posted

技术标签:

【中文标题】ListView来自android中的Sqlite【英文标题】:ListView From Sqlite in android 【发布时间】:2015-12-10 17:47:54 【问题描述】:

当我搜索整个网络时,来自 Sqlite 的 ListView 仍然存在问题。在搜索了这么多之后,我正在尝试我在 android hive 示例Link here 上的项目。因此,在 Database Handler 类中,他们提供了一个函数,即 List getAllContacts() 以获取 List 格式的所有 sqlite 数据。 我已经在我的项目中使用 ViewContact.class 中的上述函数实现了这一点。 问题是我不明白如何使用这种类型的方法或任何其他方法获取 ListView 中的所有数据。

查看我的代码(ViewContact.class):

public class ViewContact extends Activity 
DatabaseHandler helper = new DatabaseHandler(this);
String a;
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.row);
    ListView listContent = (ListView)findViewById(R.id.listView1);
    
public List<Contact> getAllContacts() 
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT  * FROM contacts";
    SQLiteDatabase db = helper.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    // looping through all rows and adding to list
    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));
        // Adding contact to list
        contactList.add(contact);
     while (cursor.moveToNext());
// return contact list
return contactList;

编辑:


查看@GrIsHu 回答后的输出是:

【问题讨论】:

您需要使用适配器类将数据绑定到ListView中。 【参考方案1】:

尝试将数据绑定到列表视图中,如下所示:

List<Contact> contact = new ArrayList<Contact>(); 
contact=getAllContacts();     
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contact); 
 listContent.setAdapter(adapter);

【讨论】:

嘿,通过将其添加到我的代码中,我的包名将附加 Contact@4052 ..... 一些东西!需要其他一些更改!帮帮我! 显示联系人列表的索引。只需在 getAllContact 方法的数组列表中添加名称,然后尝试。 我没有正确理解它。我必须在这个方法部分“new ArrayList();”中做哪些改变 只需从您的 getAllContacts() 方法中删除行 contact.setID(Integer.parseInt(cursor.getString(0))); 先生,没有变化!它仍然显示与我上面所说的相同的问题!我将我的包名称附加到 Contact@4052 ..... 东西!【参考方案2】:

下面是一个代码,我想您可以使用它来满足您的要求。在下面的代码中,我将获取保存在我的数据库中的联系人并将其显示在 listView 中。如果用户想从数据库中删除一个联系人,那么他应该长按该项目,并使用出现的对话框,他可以删除该联系人。下面是代码:

    public class viewContacts extends ListActivity 

        private static final String TAG = "MYRECORDER";

        @Override
        protected void onCreate(Bundle savedInstanceState) 
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.showcontacts);

            //Creating a List View
            ArrayList<String> listItems = new ArrayList<String>();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                    android.R.layout.simple_list_item_1, listItems);
            ListView mylist=(ListView) findViewById(android.R.id.list);
            mylist.setAdapter(adapter);


//Creating or opening an eisting database
            SQLiteDatabase db=openOrCreateDatabase("MYDB", Context.MODE_PRIVATE, null);

//Getting a cursor to fetch data from the database
              Cursor c=db.rawQuery("SELECT Number,Name FROM myTbl", null);
              Log.d(TAG, "Cursor reference obtained...");
              c.moveToFirst();
              Log.d(TAG, "Cursor Moved to First Number....");
              if(c!=null)
//If there are contents in the database, then c!=null, so using do-while loop access data // in database
                do
                    String num=c.getString(c.getColumnIndex("Number"));
                    String name=c.getString(c.getColumnIndex("Name"));
                    String Name_num=name+" : "+num;
                    listItems.add(Name_num);
                    c.moveToNext();
                while(!c.isAfterLast());

//update the list
                adapter.notifyDataSetChanged();

//closing the database after use
                db.close();

//Below is the code to delete items in data base
                mylist.setOnItemClickListener(new OnItemClickListener() 
                    String str=null;    
                    public void onItemClick(AdapterView<?> arg0, View view,
                            int arg2, long arg3) 

                        // TODO Auto-generated method stub
                        String item = ((TextView)view).getText().toString();
                         str=item.substring(item.lastIndexOf('+'));
                         Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show();
                        //Creating an Alert Dialog
                        AlertDialog .Builder builder=new AlertDialog.Builder(viewContacts.this);
                        builder.setMessage("Are you sure you want to delete the contact "+str+" ?");
                        builder.setCancelable(false);
                        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() 

                            public void onClick(DialogInterface dialog, int which) 
                                // TODO Auto-generated method stub
                                SQLiteDatabase db=openOrCreateDatabase("MYDB", MODE_PRIVATE, null);
                                Toast.makeText(getBaseContext(), "The contact: "+str+" was successfully deleted", Toast.LENGTH_LONG).show();
                                String table="myTbl";
                                String whereClause = "Number = ?";
                                String[] whereArgs = new String[]  str ;
                                db.delete(table, whereClause, whereArgs);
                                db.close();
                            
                        );
                      builder.setNegativeButton("No", new DialogInterface.OnClickListener() 

                        public void onClick(DialogInterface dialog, int which) 
                            // TODO Auto-generated method stub
                            dialog.cancel();
                        
                     );
                      AlertDialog alert=builder.create();
                      alert.show();
                               
                );
        
        
    

【讨论】:

【参考方案3】:

在这种情况下只需使用SimpleCursorAdapter:http://www.java2s.com/Code/Android/UI/UsingSimpleCursorAdapter.htm

【讨论】:

【参考方案4】:

我解决了将函数 toString 添加到我的类对象的问题。

在您的情况下,将该功能添加到班级联系人

public String toString()
    return name;

【讨论】:

以上是关于ListView来自android中的Sqlite的主要内容,如果未能解决你的问题,请参考以下文章

来自sqlite的Android中的Textview显示

在android中的sqlite数据库中的listview中显示数据[关闭]

Android Sqlite:如何从 Listview 中获取 SQLite rowId?

android中怎么将SQLite中的数据显示在Listview中(用Cursor)

Android如何扫描sdcard中的音乐文件,并加载到ListView中?

ListView 上来自 SQLite 的大数据