2013-01-24 47 views
0

它顯示的記錄的70%,但其他30點%的記錄失敗, 錯誤顯示:的Android SQLite的讀取錯誤

Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12."

這裏是我的代碼:

package com.backapp_inter.db; 
import android.content.ContentResolver; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 


public class dbquery { 
ContentResolver cr; 
Context c; 
DatabaseHelper dh; 
SQLiteDatabase db; 
    public dbquery(ContentResolver cr,Context c) { 
    // TODO Auto-generated constructor stub 
     this.cr=cr; 
     this.c=c; 
     dh=new DatabaseHelper(c); 
     db=dh.getWritableDatabase(); 
} 

這裏的邏輯列出聯繫人姓名,電子郵件和號碼。

public void process(){ 


     Cursor name = db.query("name", new String[]{"ID","name"}, null, null, null, null, null); 
     if(name.moveToFirst()){ 
      Log.e("Total Name",""+name.getCount()); 

      while(!name.isAfterLast()) {  
       Log.e("Name",name.getString(1)); 
       givemeemail(name.getInt(name.getColumnIndex("ID"))); 
     //  givemephone(name.getInt(name.getColumnIndex("ID"))); 
       name.moveToNext(); 
      } 
     } 

    name=null; 
    } 
    public void givemeemail(int i) { 
     // TODO Auto-generated method stub 
     try{ 
      Log.v("TRACK #00","givemeemail"); 
      Cursor email = db.query("email", new String[]{"edata","etype"}, "fID=?", new String[]{String.valueOf(i)},null, null, null); 
//   Log.e("Edata",email.getColumnIndex("edata")+""); 
//   Log.e("Etype",email.getColumnIndex("etype")+""); 
      if(email.moveToFirst()){ 
       while(!email.isAfterLast()) { 
        Log.e("Email",email.getString(0)); 
        Log.e("Email Type",email.getString(1)); 

        email.moveToNext(); 
       } 

      } 
      email=null; 
     } 
     catch(Exception e){ 
      if(e!=null){ 
       Log.v("Number Parse Exception","dbquery.java"); 
      } 
     } 

    } 
    public void givemephone(int i) { 
     // TODO Auto-generated method stub 
     try{ 
      Log.v("TRACK #00","givemephone"); 
      Cursor phone = db.query("phone", new String[]{"pdata","ptype"}, "fID=?", new String[]{String.valueOf(i)},null, null, null); 

      if(phone.moveToFirst()){ 
       while(!phone.isAfterLast()) { 
        Log.e("Phone",phone.getString(0)); 
        Log.e("Phone Type",phone.getString(1)); 

        phone.moveToNext(); 
       } 
      } 
     phone=null; 
     } 
     catch(Exception e){ 
      if(e!=null){ 
       Log.v("Number Parse Exception","dbquery.java"); 
      } 
     } 

    } 
} 


Logcat : 

01-24 17:09:41.601: E/Name(32656): [email protected] 
01-24 17:09:41.601: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.601: E/Email(32656): [email protected] 
01-24 17:09:41.601: E/Email Type(32656): Home 
01-24 17:09:41.601: E/Name(32656): scope4it 
01-24 17:09:41.601: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.601: E/CursorWindow(32656): Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12. 
01-24 17:09:41.611: V/Number Parse Exception(32656): Email + dbquery.java 
01-24 17:09:41.611: E/Name(32656): Suthar Ila 
01-24 17:09:41.611: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.611: E/CursorWindow(32656): Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12. 
01-24 17:09:41.611: V/Number Parse Exception(32656): Email + dbquery.java 
01-24 17:09:41.611: E/Name(32656): Chaitanya Prajapati 
01-24 17:09:41.611: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.611: E/CursorWindow(32656): Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12. 
01-24 17:09:41.611: V/Number Parse Exception(32656): Email + dbquery.java 
01-24 17:09:41.611: E/Name(32656): [email protected] 
01-24 17:09:41.611: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.611: E/CursorWindow(32656): Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12. 
01-24 17:09:41.611: V/Number Parse Exception(32656): Email + dbquery.java 
01-24 17:09:41.611: E/Name(32656): [email protected] 
01-24 17:09:41.611: V/TRACK #00(32656): givemeemail 
01-24 17:09:41.611: E/CursorWindow(32656): Could not allocate CursorWindow '/data/data/com.backapp_inter/databases/backapp' of size 4194304 due to error -12. 
01-24 17:09:41.611: V/Number Parse Exception(32656): Email + dbquery.java 
+0

嘗試[這裏](http://stackoverflow.com/questions/13989961/when-my-application-launch-force-close-error-occur) –

+0

感謝。 Bhavesh。但是這並不能解決我的錯誤-12 – user2007270

+0

只是問:你爲什麼不在一個'select'查詢中抓取NAME,EMAIL,EMAIL_TYPE,PHONE? –

回答

2

您應該始終確保關閉遊標,最好在finally塊中,只需將引用設置爲null即可釋放其資源。

... 
Cursor cursor = null; 
try { 
..open your cursor, run query, loop etc 
} finally { 
if (cursor!=null) cursor.close(); 
} 
+0

Masse:謝謝。它已解決。實際上,我將遊標設置爲「null」。但是使它爲空並不會釋放資源。你的方法工作。 – user2007270