Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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获取数据并显示为listview_Android_Sqlite - Fatal编程技术网

Android 从sqlite获取数据并显示为listview

Android 从sqlite获取数据并显示为listview,android,sqlite,Android,Sqlite,我试图从sq lite数据库中获取数据并显示为列表。 我尝试了之前给出的不同解决方案,但没有成功 当我试图显示列表时,我不断地得到GC-CONCURRENT FREED。 过了一段时间,我出现内存不足错误,应用程序停止响应 DataBaseHelper.class public class DataBaseHandler extends SQLiteOpenHelper { private static final int Database_Version = 1; private stati

我试图从sq lite数据库中获取数据并显示为列表。 我尝试了之前给出的不同解决方案,但没有成功

当我试图显示列表时,我不断地得到GC-CONCURRENT FREED。 过了一段时间,我出现内存不足错误,应用程序停止响应

DataBaseHelper.class

public class DataBaseHandler extends SQLiteOpenHelper {

private static final int Database_Version = 1;
private static final String Database_Name = "remindme";
static final String Table_RemindMe = "reminders";
 static final String Key_Id = "id";
static final String Key_Title = "title";
static final String Key_Description = "description";
 static final String Key_Date = "date";
List<RemindMe> reminderList = new ArrayList<RemindMe>();


public DataBaseHandler(Context context) {
    super(context, Database_Name, null, Database_Version);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String CREATE_REMINDME_TABLE = "CREATE TABLE " + Table_RemindMe + "("
            + Key_Id + " INTEGER PRIMARY KEY AUTOINCREMENT," + Key_Title
            + " TEXT, " + Key_Date + " TEXT," + Key_Description + " TEXT" + ")";
    db.execSQL(CREATE_REMINDME_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
   db.execSQL("DROP TABLE IF EXIXTS" + Table_RemindMe);
     onCreate(db);
}

void addRemindMe(RemindMe remindme){

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(Key_Title, remindme.getTitle());
    values.put(Key_Description, remindme.getDescription());
    values.put(Key_Date, remindme.getDate());
    db.insert(Table_RemindMe, null, values);
    db.close();

}

public List<RemindMe> getReminder(){
    List<RemindMe> reminderList = new ArrayList<RemindMe>();
    String selectQuery = "Select * FROM " + Table_RemindMe ;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    try{

    if(cursor.moveToFirst()){
        do{
            RemindMe reminder = new RemindMe();
            reminder.setId(Integer.parseInt(cursor.getString(0)));
            reminder.setTitle(cursor.getString(1));
            reminder.setDescription(cursor.getString(2));
            reminder.setDate(cursor.getString(3));
            reminderList.add(reminder);
        }while(cursor.moveToLast());
    }

    }
    finally{
        cursor.close();
    }
    db.close();
    return reminderList;
}
 DataBaseHandler db=new DataBaseHandler();
Log.d("Reading", "Reading Reminders");
 List<RemindMe> reminders= db.getReminder();

 for(RemindMe r:reminders){
 HashMap<String, String> map = new HashMap<String, String>();
  map.put("Title", r.title);
  map.put("Desc", r.description);

  Items.add(map);
}


ListAdapter adapter=new SimpleAdapter(this,Items,android.R.layout.simple_expandable_list_item_1,new String[]{"Iitle" , "Desc"},null);

    lv.setAdapter(adapter);
公共类DataBaseHandler扩展了SQLiteOpenHelper{
私有静态最终int数据库_Version=1;
私有静态最终字符串数据库\u Name=“提醒”;
静态最终字符串表\u ememembleme=“提醒”;
静态最终字符串键\u Id=“Id”;
静态最终字符串键\u Title=“Title”;
静态最终字符串键\u Description=“Description”;
静态最终字符串键\u Date=“Date”;
列表提醒列表=新建ArrayList();
公共数据库处理程序(上下文){
super(上下文、数据库名称、null、数据库版本);
//TODO自动生成的构造函数存根
}
@凌驾
public void onCreate(SQLiteDatabase db){
//TODO自动生成的方法存根
字符串CREATE\u ememembleme\u TABLE=“CREATE TABLE”+TABLE\u embleme+”(“
+键Id+“整数主键自动递增”+“键标题”
+“文本,“+按键日期+”文本,“+按键说明+”文本“+”;
db.execSQL(创建提醒表);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//TODO自动生成的方法存根
db.execSQL(“如果EXIXTS删除表格”+表格提醒);
onCreate(db);
}
作废添加提醒(提醒提醒提醒){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues=新的ContentValues();
value.put(Key_Title,emememptime.getTitle());
value.put(Key_Description,emememptime.getDescription());
value.put(Key_Date,emememptime.getDate());
db.insert(表_提醒,空,值);
db.close();
}
公共列表{
列表提醒列表=新建ArrayList();
String selectQuery=“Select*FROM”+表格\提醒;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
试一试{
if(cursor.moveToFirst()){
做{
提醒提醒=新提醒();
setId(Integer.parseInt(cursor.getString(0));
提醒.setTitle(cursor.getString(1));
remention.setDescription(cursor.getString(2));
提醒.setDate(cursor.getString(3));
提醒列表。添加(提醒);
}while(cursor.moveToLast());
}
}
最后{
cursor.close();
}
db.close();
返回提醒列表;
}
列表类

public class DataBaseHandler extends SQLiteOpenHelper {

private static final int Database_Version = 1;
private static final String Database_Name = "remindme";
static final String Table_RemindMe = "reminders";
 static final String Key_Id = "id";
static final String Key_Title = "title";
static final String Key_Description = "description";
 static final String Key_Date = "date";
List<RemindMe> reminderList = new ArrayList<RemindMe>();


public DataBaseHandler(Context context) {
    super(context, Database_Name, null, Database_Version);
    // TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String CREATE_REMINDME_TABLE = "CREATE TABLE " + Table_RemindMe + "("
            + Key_Id + " INTEGER PRIMARY KEY AUTOINCREMENT," + Key_Title
            + " TEXT, " + Key_Date + " TEXT," + Key_Description + " TEXT" + ")";
    db.execSQL(CREATE_REMINDME_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub
   db.execSQL("DROP TABLE IF EXIXTS" + Table_RemindMe);
     onCreate(db);
}

void addRemindMe(RemindMe remindme){

    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(Key_Title, remindme.getTitle());
    values.put(Key_Description, remindme.getDescription());
    values.put(Key_Date, remindme.getDate());
    db.insert(Table_RemindMe, null, values);
    db.close();

}

public List<RemindMe> getReminder(){
    List<RemindMe> reminderList = new ArrayList<RemindMe>();
    String selectQuery = "Select * FROM " + Table_RemindMe ;
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    try{

    if(cursor.moveToFirst()){
        do{
            RemindMe reminder = new RemindMe();
            reminder.setId(Integer.parseInt(cursor.getString(0)));
            reminder.setTitle(cursor.getString(1));
            reminder.setDescription(cursor.getString(2));
            reminder.setDate(cursor.getString(3));
            reminderList.add(reminder);
        }while(cursor.moveToLast());
    }

    }
    finally{
        cursor.close();
    }
    db.close();
    return reminderList;
}
 DataBaseHandler db=new DataBaseHandler();
Log.d("Reading", "Reading Reminders");
 List<RemindMe> reminders= db.getReminder();

 for(RemindMe r:reminders){
 HashMap<String, String> map = new HashMap<String, String>();
  map.put("Title", r.title);
  map.put("Desc", r.description);

  Items.add(map);
}


ListAdapter adapter=new SimpleAdapter(this,Items,android.R.layout.simple_expandable_list_item_1,new String[]{"Iitle" , "Desc"},null);

    lv.setAdapter(adapter);
DataBaseHandler db=newdatabasehandler();
日志d(“阅读”、“阅读提醒”);
列表提醒=db.getrementer();
用于(提醒:提醒){
HashMap=newHashMap();
地图名称(“标题”,右标题);
地图放置(“描述”,右描述);
添加(地图);
}
ListAdapter=new SimpleAdapter(这个,Items,android.R.layout.simple\u可扩展的\u列表\u item\u 1,新字符串[]{“Iitle”,“Desc”},null);
低压设置适配器(适配器);

请帮我解决这个问题。

您需要了解数据库的工作原理和使用方法。这看起来像是您试图逐行转换php脚本,而且这种做法非常低效

我可以看出你是新来的,但通常你要展示你试图解决问题的方法,你不能要求帮助调试整个项目,它太广泛了,无法得到有用的答案,所以在写下一个问题时要记住这一点

目前的问题是对do…while循环工作原理的误解

基本上它的意思是“做一次,然后继续做,只要其他事情是真的”

因此,您的循环遍历第一行,将其添加到列表中,移动到最后一行(跳过中间)。将其添加到列表中。然后一次又一次地转到最后一行,将数百个相同的项目添加到列表中

您只需更改以下内容:

do {
   ...
} while(cursor.moveToNext());

因为当没有下一行时,moveToNext将返回false。与的区别是,除非光标为空,否则它将始终返回true,因为我们成功地移动到了第一个项目。

可能是您正在处理主线程。您应该使用
游标加载程序