2011-11-30 39 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