【问题标题】:Android, accessing to database via fragments throws "exception in initializer error"?Android,通过片段访问数据库会引发“初始化错误异常”?
【发布时间】:2012-07-18 04:36:52
【问题描述】:

在我的活动中,我有 4 个片段。其中之一需要连接到数据库并获取其数据。但是,当我运行我的应用程序时发生错误并且 logcat 显示:

07-19 02:09:01.011: E/AndroidRuntime(229):  Uncaught handler: thread main exiting due to uncaught exception
07-19 02:09:01.031: E/AndroidRuntime(229):  java.lang.ExceptionInInitializerError
07-19 02:09:01.031: E/AndroidRuntime(229):  at com.astro.database.DatabaseHandler.<init>(DatabaseHandler.java:26)
07-19 02:09:01.031: E/AndroidRuntime(229):  at com.astro.fragments.TopRecipesFragment.onActivityCreated(TopRecipesFragment.java:96)
07-19 02:09:01.031: E/AndroidRuntime(229):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:892)
07-19 02:09:01.031: E/AndroidRuntime(229):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
07-19 02:09:01.031: E/AndroidRuntime(229):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1065)
.
.
.

我的 Fragment 的代码是这样的:

public class TopRecipesFragment extends Fragment {

    private Context context;
    private DatabaseHandler dbHandler;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        View view = inflater.inflate(R.layout.template_toprecipes, container, false);
        context = getActivity().getApplicationContext();

        Log.i(TAG, "View created.");

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i(TAG, "inside onActivityCreated()");

        dbHandler = new DatabaseHandler(context);

    }

    .
    .
    .

}

然后,DatabaseHandler 类:

public class DatabaseHandler {

    private DatabaseHelper dbHelper;
    private SQLiteDatabase database;

    public DatabaseHandler(Context context) {
        dbHelper = new DatabaseHelper(context); // Error happens here
    }

    public void open() throws SQLException {
        database = dbHelper.getWritableDatabase();
    }

    public void close() {
        dbHelper.close();
    }

    .
    .
    .
}

最后是 DatabaseHelper 类:

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "db";   
    private static final String COLUMN_ID     = "_id";
    private static final int DATABASE_VERSION = 1;

    public DatabaseHelper(Context context) {

        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    .
    .
    .
}

我不知道为什么会这样。任何建议,将不胜感激。谢谢

【问题讨论】:

    标签: android database exception


    【解决方案1】:

    片段中的context 字段来自哪里?我的猜测是这可能是null,这导致了异常。尝试使用dbHandler = new DatabaseHandler(getActivity())。 (活动自然是Context

    【讨论】:

    • 谢谢亲爱的 Nikolay,实际上我对上下文也很怀疑。我测试了你的建议,但是反应是一样的。发生了同样的崩溃。谢谢
    • 上面,dbHandler = new DatabaseHandler(context);,我放了一条 toast 消息,它起作用了。因此,toast 的这种上下文没有问题,但数据库不能接受!
    • 有趣。你能从一个活动中实例化DatabaseHelper而没有错误吗?
    • ohhhh,我已经把 DatabaseHandler dbHandler = new DatabaseHandler(this);在活动和 FragmentActivity 但我有同样的错误。 :(
    猜你喜欢
    • 2013-04-29
    • 2023-03-07
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多