2016-12-19 27 views
0

我有一个运行一次,就在OnCreate和 一个sqlite的方法,它是下列之一:sqlite的方向变化内存泄露

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视图,其具有一个下拉 ,其从由所述分贝方法返回的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")) ); 
+0

如果您显示可编译的Java代码,这将有所帮助。特别是,你应该有一个类和一个包含你所问的代码的方法。这有助于我们将错误消息中的名称与代码中的名称进行匹配。 –

+0

另请标记哪一行是262. –

+0

@代码学徒,我已经指定了 – Ryan

回答

0

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

+0

这是对的,但问题是,应用程序崩溃后,我旋转2次或更多次,这是否告诉你anthing? 我将约9k行加载到阵列中 – Ryan