【问题标题】:Call SQLiteOpenHelper method from fragment从片段调用 SQLiteOpenHelper 方法
【发布时间】:2016-08-27 03:08:29
【问题描述】:

我想调用这个方法 getAllData();从 Fragment,此方法从 SQlite 数据库返回游标数据,我想在 Fragment 中使用该数据来创建 listView,我使用这些代码行来访问该数据

PackagesDbHelper mydb = new PackagesDbHelper(getActivity());
Cursor result = mydb.getAllData();

但在应用程序启动时我收到此错误“不幸的是应用程序已停止”但如果我排除这行代码

Cursor result = mydb.getAllData();

我的应用运行良好

PackagesDbHelper

public class PackagesDbHelper extends SQLiteOpenHelper {

public Cursor getAllData() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor result = db.rawQuery("SELECT * FROM " + PackagesContract.ufoneEntry.TABLE_NAME, null);
    return result;
}

}

包片段

public class PackagesFragment extends Fragment {

private PackagesAdapter packagesAdapter;
PackagesDbHelper mydb = new PackagesDbHelper(getActivity());

@Override
public void onCreate(Bundle savedInstanceState) {
    Cursor result = mydb.getAllData();

    super.onCreate(savedInstanceState);
}


}

【问题讨论】:

    标签: android sqlite android-fragments


    【解决方案1】:

    这里:

    PackagesDbHelper mydb = new PackagesDbHelper(getActivity());
    

    导致问题的行,因为在类级别调用 getActivity() 将返回无效的活动上下文。

    onCreate 或任何其他方法中初始化mydb 对象:

    mydb = new PackagesDbHelper(getActivity());
    Cursor result = mydb.getAllData();
    

    【讨论】:

      【解决方案2】:

      问题出在

      SQLiteDatabase db = this.getWritableDatabase();
      

      这个方法应该被上下文调用。

      public Cursor getAllData() {
          SQLiteDatabase db = context.getWritableDatabase();
          Cursor result = db.rawQuery("SELECT * FROM " + PackagesContract.ufoneEntry.TABLE_NAME, null);
          return result; 
      }
      

      【讨论】:

        猜你喜欢
        • 2020-01-29
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2012-09-21
        • 2018-06-14
        相关资源
        最近更新 更多