java.lang.OutOfMemoryError: [内存耗尽] 从 Sqlite Android 读取数据时 [英] java.lang.OutOfMemoryError: [memory exhausted] while reading data from Sqlite Android

查看:40
本文介绍了java.lang.OutOfMemoryError: [内存耗尽] 从 Sqlite Android 读取数据时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已成功将数据保存在 SQLite DB 中.但是我在从我的 SQLite 数据库读取数据时出错,然后我的应用程序崩溃了.

I have successfully saved my data in SQLite DB. But I am getting an error while reading data from my SQLite DB and then my app is crashing.

错误提示

01-01 05:42:13.916 607-607/com.example.eyesaver I/dalvikvm:   | sysTid=607 nice=0 sched=0/0 cgrp=apps handle=68313184
01-01 05:42:13.916 607-607/com.example.eyesaver I/dalvikvm:   | sysTid=607 nice=0 sched=0/0 cgrp=apps handle=68313184
01-01 05:42:13.916 607-607/com.example.eyesaver I/dalvikvm:   | state=R schedstat=( 0 0 0 ) utm=2910 stm=2910 core=0
01-01 05:42:13.916 607-607/com.example.eyesaver I/dalvikvm:   | state=R schedstat=( 0 0 0 ) utm=2910 stm=2910 core=0
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.CursorWindow.nativeGetString(Native Method)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.CursorWindow.nativeGetString(Native Method)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.CursorWindow.getString(CursorWindow.java:434)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.CursorWindow.getString(CursorWindow.java:434)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at com.example.eyesaver.SQ_Lite_DB.ReadSqliteData(SQ_Lite_DB.java:59)
01-01 05:42:13.917 607-607/com.example.eyesaver I/dalvikvm:     at com.example.eyesaver.SQ_Lite_DB.ReadSqliteData(SQ_Lite_DB.java:59)// I marked this line in code

1-01 05:42:16.189 607-607/com.example.eyesaver E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.eyesaver, PID: 607
    java.lang.OutOfMemoryError: [memory exhausted]
        at dalvik.system.NativeStart.main(Native Method)
01-01 05:42:16.189 607-607/com.example.eyesaver E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.eyesaver, PID: 607
    java.lang.OutOfMemoryError: [memory exhausted]
        at dalvik.system.NativeStart.main(Native Method)

我正在使用ReadSqliteData()"方法从我的 SQLite 读取数据

I am reading data from my SQLite using the 'ReadSqliteData()' method

ReadSqliteData() 方法

ReadSqliteData() method

public void ReadSqliteData(Context context){
    ArrayList<Model> list = new ArrayList<>();
    Adpter adpter = new Adpter(list,context);
    SQLiteDatabase database = getWritableDatabase();
    Cursor cursor = database.rawQuery("Select name, image from orders",null);
    if (cursor.moveToFirst()){
        while (cursor.moveToFirst()){
            Model model = new Model();
            model.setImage(cursor.getString(0));   //i am getting error here 
            model.setName(cursor.getString(1));    //i am getting error here 
            list.add(model);
        }
        adpter.notifyDataSetChanged();
    }
    cursor.close();
    database.close();
}

还有一个问题:我的 id 在 SQLite 数据库中为空,不知道为什么?我正在创建一个这样的表

And one more problem: my id is null in the SQLite database, I don't know why? I am creating a table like this

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(
                "Create Table orders"+
                        "(id INTERGER PRIMARY KEY,"+
                        "image text ,"+
                        "name text)"
        );
    }

如果您需要任何其他信息,请告诉我.

If you need any other information let me know.

推荐答案

你的循环永远不会结束,因为在每次迭代中,你使用 moveToFirst() 将光标的索引设置在第一行,而不会前进到下一行行.
仅使用 moveToNext():

Your loop never ends because in each iteration you set the cursor's index at the 1st row with moveToFirst() without advancing to the next row.
Use moveToNext() only:

public void ReadSqliteData(Context context){
    ArrayList<Model> list = new ArrayList<>();
    Adpter adpter = new Adpter(list,context);
    SQLiteDatabase database = getWritableDatabase();
    Cursor cursor = database.rawQuery("Select name, image from orders",null);
    while (cursor.moveToNext()){
        Model model = new Model();
        model.setImage(cursor.getString(0));            
        model.setName(cursor.getString(1));    
        list.add(model);
    }
    adpter.notifyDataSetChanged();
    cursor.close();
    database.close();
}

这篇关于java.lang.OutOfMemoryError: [内存耗尽] 从 Sqlite Android 读取数据时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆