sqlite方向更改内存泄漏

时间:2016-12-19 02:24:28

标签: java android sqlite

我有一个运行一次的sqlite方法,在oncreate和 它是以下一个:

List<Map<String, String>> resultsMap = new ArrayList<>();

        String sqlQuery = " SELECT city_id,city_name,population FROM citylist ";

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor c          = db.rawQuery(sqlQuery, null);

        int i = 0;
        //Loop through the results and add it to the temp_array
        if (c.moveToFirst()){

            do{
                //Answer Map
                Map<String, String> map = new HashMap<String, String>();
                map.put("cid",       c.getString(c.getColumnIndex("city_id"))  );
                map.put("cname",     c.getString(c.getColumnIndex("city_name"))  );
                map.put("population",    c.getString(c.getColumnIndex("population"))  );
                //Add Answer to Answers arraylistmap
                resultsMap.add(i, map);
                i++;

            } while(c.moveToNext());

        }

        //Close the cursor
        c.close();
        db.close();

        //Return the string array
        return theresults;

一切运行良好,但问题是当我旋转模拟器时 在屏幕上几次,内存不足。

我在onCreate上这样称呼它

citiesList = myDbHelper.citiesListDB();
autoCompleteSearch.setThreshold(1);
searchAdapter = new SearchableAdapter(this, citiesList);
autoCompleteSearch.setAdapter(searchAdapter);

autoCompleteSearch是一个AutoCompleteTextView视图,它有一个下拉列表 从db方法返回的ArrayList填充。


我尽力关闭数据库连接,但应用程序崩溃了 但仍有此错误

E/dalvikvm-heap: Out of memory on a 28-byte allocation.
I/dalvikvm: "main" prio=5 tid=1 RUNNABLE
I/dalvikvm:   | group="main" sCount=0 dsCount=0 obj=0xb5e5a4b0 self=0xb8b1a4e0
I/dalvikvm:   | sysTid=11362 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=-1208536000
I/dalvikvm:   | schedstat=( 0 0 0 ) utm=40 stm=45 core=0
I/dalvikvm:     at java.util.HashMap.makeTable(HashMap.java:~555)
I/dalvikvm:     at java.util.HashMap.doubleCapacity(HashMap.java:575)
I/dalvikvm:     at java.util.HashMap.put(HashMap.java:405)
I/dalvikvm:     at DatabaseHelper.citiesListDB(DatabaseHelper.java:262)

和这个:

FATAL EXCEPTION: main
java.lang.OutOfMemoryError: [memory exhausted]
at dalvik.system.NativeStart.main(Native Method)

我认为这可能是与内存垃圾有关的东西


更新:DatabaseHelper.java:262

map.put("cid",       c.getString(c.getColumnIndex("city_id"))  );

1 个答案:

答案 0 :(得分:0)

您正在正确关闭数据库,因此这很可能与错误无关。我认为你在内存中加载了太多数据。您应该使用CursorAdapter而不是ArrayAdapter。