Android 从数据库检索数据并在自定义listview中设置

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 {

从数据库检索数据并在自定义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 {
            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);//列表视图