【问题标题】:How to use startmanagingcursor in fragment?如何在片段中使用 startmanagingcursor?
【发布时间】:2012-10-05 05:02:54
【问题描述】:

如何在片段中使用 startmanagingcursor?因为我需要在 Fragment 中从 SQLite 中提取数据,但我不能在其中使用 startmanagingcursor。

这是我的代码

 @Override  
 public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);
        dbUtil.open();
        Cursor cursor = dbUtil.fetchNews(getArguments().getString("title"));
        getActivity().startManagingCursor(cursor);
        newsTitle = cursor.getString(0);
        dbUtil.close();
 }

【问题讨论】:

  • 它在文档中明确提到,> startManagingCursor (Cursor c) >> 该方法已弃用。将新的 CursorLoader 类与 > LoaderManager 一起使用;这在旧平台上也可用 > 通过 Android 兼容性包。那你为什么要使用不推荐使用的方法呢?
  • 你没有。这是一个Activity 方法,它已被弃用。请改用Loader

标签: android sqlite android-fragments


【解决方案1】:

由于其他人似乎都想对你说教而不给你答案,我实际上会回答你的问题(然后说教:p)。

getActivity().startManagingCursor(yourCursor);

就这么简单。

正如其他人所指出的,它已被弃用,并且出于多种原因推荐使用 CursorLoader... 让数据处理远离 UI 线程是主要线程。

但是如果你真的需要/想要在片段中使用startManagingCursor,上面的 sn-p 就是你会这样做的方式。

鉴于您发布的更多信息,另一个问题可能是您尝试从哪里调用数据库。您不应该在片段类中使用onCreate 方法(至少对于这些操作),您应该使用onActivityCreated。这样,您就可以确定控制您的片段的 Activity 已完成设置,然后再尝试使用与之相关的任何内容。

【讨论】:

  • android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 即使我添加了 getActivity().startManagingCursor(myCursor) 仍然出现此错误。你能告诉我 CursorLoader 的任何用法吗?
  • 该错误与您的光标无关......它与数据库有关。好像因为某种原因打不开。
  • public DatabaseUtil open() 抛出 SQLException { mDbHelper = new DatabaseHelper(myContext); mDb = mDbHelper.getWritableDatabase();返回这个; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2015-07-22
  • 1970-01-01
  • 2013-01-04
相关资源
最近更新 更多