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 ArrayListgetAllContacts()
方法中删除行 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的主要内容,如果未能解决你的问题,请参考以下文章
在android中的sqlite数据库中的listview中显示数据[关闭]
Android Sqlite:如何从 Listview 中获取 SQLite rowId?
android中怎么将SQLite中的数据显示在Listview中(用Cursor)