gpt4 book ai didi

android - 多游标加载器

转载 作者:行者123 更新时间:2023-11-29 14:03:35 25 4
gpt4 key购买 nike

我扩展了我之前的问题,我解决了那个问题,但我有一个新的类似错误。

我有以下 Activity

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 我完成()这个 Activity 并开始一个新的,当我完成新的返回到这个有时我有以下错误

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 android.database.sqlite.SQLiteCursor@43c6ab00 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 个加载器,问题仍然存在。似乎随着 Activity 完成,加载程序有时不会关闭光标,为什么?

最佳答案

  1. 为什么要在开始新 Activity 之前在此 Activity 中调用 finish()? Android 处理 Activity 生命周期。如果是因为您不想在下一个 Activity 结束时返回到此 Activity ,请考虑 noHistory相反。

  2. 您发布的错误意味着有一个本应关闭的打开游标。如果您在完成新 Activity 时看到错误,这对我来说似乎表明错误出在新 Activity 中,而不是这个 Activity 中。您可能需要调用 Cursor.close()在完成新 Activity 之前(可能在 onPause()onDestroy() 中)。

我对您之前问题的回答可能也有一些用处:https://stackoverflow.com/a/8857179/399105

关于android - 多游标加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com