Android 从数据库检索数据并在自定义listview中设置
从数据库检索数据并在自定义listview中设置,但仅在列表视图中显示DB中的最后一个数据 这是我的代码,请解决我的问题Android 从数据库检索数据并在自定义listview中设置,android,sqlite,android-listview,Android,Sqlite,Android Listview,从数据库检索数据并在自定义listview中设置,但仅在列表视图中显示DB中的最后一个数据 这是我的代码,请解决我的问题 SQLiteDatabase myDb = openOrCreateDatabase(DB_Name,Context.MODE_PRIVATE, null); try { c=myDb.rawQuery("select sid,name,num from Contact", null); if (c.moveToFirst()) { do {
SQLiteDatabase myDb = openOrCreateDatabase(DB_Name,Context.MODE_PRIVATE, null);
try {
c=myDb.rawQuery("select sid,name,num from Contact", null);
if (c.moveToFirst()) {
do {
name1=c.getString(c.getColumnIndex("name")).toString();
num1=c.getString(c.getColumnIndex("num")).toString();
Log.d("string is",name1+num1);
}
while (c.moveToNext());
}
valnumber.add(name1+"<<"+num1+">>");
custlistAdapter = new CustListview(Contact.this, R.layout.custlistview,valnumber);
ShowCont.setAdapter(custlistAdapter);
myDb.close();
SQLiteDatabase myDb=openOrCreateDatabase(DB\u Name,Context.MODE\u PRIVATE,null);
试一试{
c=myDb.rawQuery(“从联系人中选择sid、名称、num”,null);
if(c.moveToFirst()){
做{
name1=c.getString(c.getColumnIndex(“name”)).toString();
num1=c.getString(c.getColumnIndex(“num”)).toString();
Log.d(“字符串为”,名称1+num1);
}
而(c.moveToNext());
}
valnumber.add(name1+“”);
custlistAdapter=new CustListview(Contact.this,R.layout.CustListview,valnumber);
ShowCont.setAdapter(custlistAdapter);
myDb.close();
CustListview.java
公共类CustListview扩展了ArrayAdapter{
private final Activity context;
private final ArrayList<String> web;
int layoutResourceId;
public CustListview(Activity context,int custlistview, List<String> val)
{
super(context, R.layout.custlistview, val);
this.context = context;
this.web = (ArrayList<String>) val;
}
@Override
public View getView(int position, View Convertview, ViewGroup parent) {
View row=Convertview;
UserHolder holder = null;
if(row==null)
{
LayoutInflater inflater=((Activity)context).getLayoutInflater();
row=inflater.inflate(R.layout.custlistview, null, true);
holder=new UserHolder();
holder.imgdelete=(Button)row.findViewById(R.id.imagedelete);
holder.txtTitle = (TextView) row.findViewById(R.id.txt);
//LayoutInflater inflater = context.getLayoutInflater();
//View rowView= inflater.inflate(R.layout.custlistview, null, true);
row.setTag(holder);
}
else
{
holder=(UserHolder)row.getTag();
}
holder.txtTitle.setText(web.toString());
holder.imgdelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getContext(), "delete", Toast.LENGTH_LONG).show();
}});
return row;
}
static class UserHolder {
TextView txtTitle;
Button imgdelete;
}}
私有最终活动上下文;
私有最终ArrayList网站;
国际布局资源;
公共CustListview(活动上下文、int CustListview、列表val)
{
super(context,R.layout.custlistview,val);
this.context=上下文;
this.web=(ArrayList)val;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
UserHolder=null;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(R.layout.custlistview,null,true);
holder=新用户holder();
holder.imgdelete=(按钮)row.findViewById(R.id.imagedelete);
holder.txtTitle=(TextView)row.findViewById(R.id.txt);
//LayoutInflater充气器=上下文。getLayoutInflater();
//视图行视图=充气机。充气(R.layout.custlistview,null,true);
row.setTag(支架);
}
其他的
{
holder=(UserHolder)row.getTag();
}
holder.txtTitle.setText(web.toString());
holder.imgdelete.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
Toast.makeText(getContext(),“delete”,Toast.LENGTH_LONG.show();
}});
返回行;
}
静态类用户持有者{
TextView-txtTitle;
按钮imgdelete;
}}
试试这样的事情
cursor = sqldb.query("Contact", null, null, null, null, null, "sid");
if (cursor != null && cursor.getCount() > 0) {
if (cursor.moveToFirst()) {
do {
name1=cursor.getString(cursor.getColumnIndex("name"));
num1=cursor.getString(cursor.getColumnIndex("num"));
Log.d("string is",name1+num1);
} while (cursor.moveToNext());
}
}
cursor.close();
您是否检查了从数据库中获得的姓名和号码。 您的代码只是在数组中添加了一行,您必须在while循环中移动该行
SQLiteDatabase myDb = openOrCreateDatabase(DB_Name,Context.MODE_PRIVATE, null);
try {
c=myDb.rawQuery("select sid,name,num from Contact", null);
if (c.moveToFirst()) {
do {
name1=c.getString(c.getColumnIndex("name"));
num1=c.getString(c.getColumnIndex("num"));
Log.d("string is",name1+num1);
valnumber.add(name1+"<<"+num1+">>");
}
while (c.moveToNext());
}
custlistAdapter = new CustListview(Contact.this, R.layout.custlistview,valnumber);
ShowCont.setAdapter(custlistAdapter);
myDb.close();
SQLiteDatabase myDb=openOrCreateDatabase(DB\u Name,Context.MODE\u PRIVATE,null);
试一试{
c=myDb.rawQuery(“从联系人中选择sid、名称、num”,null);
if(c.moveToFirst()){
做{
name1=c.getString(c.getColumnIndex(“name”);
num1=c.getString(c.getColumnIndex(“num”);
Log.d(“字符串为”,名称1+num1);
valnumber.add(name1+“”);
}
而(c.moveToNext());
}
custlistAdapter=new CustListview(Contact.this,R.layout.CustListview,valnumber);
ShowCont.setAdapter(custlistAdapter);
myDb.close();
Logic error.Move valnumber.add(name1+“”);在while循环中。我也尝试了此操作,但显示了相同的最后一个数据。我想在自定义列表中添加此db数据。我在while语句之前添加了3行。相同的操作仅显示列表视图中的最后一个数据。valnumber.add(name1+“”);custlistAdapter=new CustListview(Contact.this,R.layout.CustListview,valnumber);ShowCont.setAdapter(custlistAdapter);//列表视图