2011-11-30 68 views
2

我擴展了我以前的一個問題,我解決了這個問題,但我有一個新的類似錯誤。多個光標加載器

我有以下活動

public class ActivityMatchesList extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ListView lvLive = (ListView)findViewById(R.id.matchListList); 
     lvLive.setOnItemClickListener(OnItemClickListenerLive); 
     getSupportLoaderManager().initLoader(1, null, this); 
     getSupportLoaderManager().initLoader(2, null, this); 
     getSupportLoaderManager().initLoader(3, null, this); 
    } 

    private OnItemClickListener OnItemClickListenerLive = new OnItemClickListener(){ 
     Intent i = new Intent(ActivityMatchesList.this, ActivityEvents.class); 
     finish(); 
     startActivity(i); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { //FIXME: add switch for 3 loader 
     switch (id){ 
     case 1: 
      CursorLoader cursorLoaderLive = new CursorLoader(this, uri1,null,null,null,null); 
      return cursorLoaderLive; 
     case 2: 
      CursorLoader cursorLoaderRankingLeague = new CursorLoader(this, uri1,null,null,null,null); 
      return cursorLoaderRankingLeague; 
     case 3: 
      CursorLoader cursorLoaderRankingLive = new CursorLoader(this, uri1,null,null,null,null); 
      return cursorLoaderRankingLive; 
     default: 
      return null; 
     } 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
     switch (loader.getId()){ 
     case 1: 
      Adapter1.swapCursor(cursor); 
      break; 
     case 2: 
      Adapter2.swapCursor(cursor); 
      break; 
     case 3: 
      Adapter3.swapCursor(cursor); 
      break; 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 
     switch (loader.getId()){ 
     case 1: 
      Adapter1.swapCursor(null); 
      break; 
     case 2: 
      Adapter2.swapCursor(null); 
      break; 
     case 3: 
      Adapter3.swapCursor(null); 
      break; 
     } 
    } 
} 

隨着OnItemClickListener我完成()本次活動,並開始一個新的,當我完成新回到這個有時我有以下錯誤

11-30 09:35:01.839: INFO/dalvikvm(321): Uncaught exception thrown by finalizer (will be discarded): 
11-30 09:35:01.848: INFO/dalvikvm(321): Ljava/lang/IllegalStateException;: Finalizing cursor [email protected] on MAIN_TABLE that has not been deactivated or closed 
11-30 09:35:01.848: INFO/dalvikvm(321):  at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596) 
11-30 09:35:01.848: INFO/dalvikvm(321):  at dalvik.system.NativeStart.run(Native Method) 

我無法找出原因,有人可以幫我嗎?

編輯:如果我只使用1個加載程序,問題仍然存在。看來,隨着活動的完成,裝載機有時不會關閉遊標,爲什麼?

回答

0
  1. 爲什麼在開始新的活動之前打電話給finish()? Android處理活動的生命週期。如果因爲您不想在下一個活動完成時返回到此活動,請考慮使用noHistory

  2. 您發佈的錯誤表示應該已經關閉了一個打開的光標。如果您在完成新活動時看到錯誤,它似乎向我指出錯誤在新活動中,而不是此活動。您可能需要在完成新活動(可能位於onPause()onDestroy())之前致電Cursor.close()

我的回答你剛纔的問題也可能會出現一些使用:https://stackoverflow.com/a/8857179/399105