使用通过帮助类创建的游标来填充ListView

时间:2013-07-11 23:43:43

标签: android cursor sqlite

我对此代码片段有疑问。

我有一个通过“Manager”类连接的SQLiteDatabase。我正在调用以下函数:

        try {
        String[] selectionArgs = { String.valueOf(_id) };
        SQLiteDatabase dbReadable = Db.getReadableDatabase();
        Cursor cursor =  dbReadable.rawQuery(sqlQuery, selectionArgs);
        return cursor;

    } catch (SQLiteException e) {
        Log.e(tag, "SQLiteException: /n " + sqlQuery);
    }
    return null;

sqlQuery是一个有效的SQL查询,因为它不会抛出SQLiteException()。 所以我想要的是将我的数据库的几行游标提供给另一个类,以便这些信息将显示在ListView中。

Cursor cursor = Manager.getChildren(id);

mAdapter = new SimpleCursorAdapter(context ,R.layout.small_listitem, cursor , uiBindFrom, uiBindTo,0);

setListAdapter(mAdapter);

然而,我正在做的任何事情都会破坏我的应用程序或ListView没有显示任何内容。

所以基本上我有两个问题:这是正确的方法吗? - 我不想创建结果列表。 其次:我需要在哪里关闭()我的数据库。或者关闭光标就足够了。

我已经整天尝试过了,我想我已经陷入困境了。

我见过有人要求Logcat。这就是我得到的:

07-12 00:50:07.868: E/AndroidRuntime(14799): FATAL EXCEPTION: main
07-12 00:50:07.868: E/AndroidRuntime(14799): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.dornathal.planyourmeals/de.dornathal.planyourmeals.view.FoodInformation}: java.lang.NullPointerException
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.os.Looper.loop(Looper.java:137)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread.main(ActivityThread.java:4424)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at java.lang.reflect.Method.invokeNative(Native Method)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at java.lang.reflect.Method.invoke(Method.java:511)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at dalvik.system.NativeStart.main(Native Method)
07-12 00:50:07.868: E/AndroidRuntime(14799): Caused by: java.lang.NullPointerException
07-12 00:50:07.868: E/AndroidRuntime(14799):    at de.dornathal.planyourmeals.view.FoodBoxPicture.onCreateView(FoodBoxPicture.java:37)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.Activity.performStart(Activity.java:4475)
07-12 00:50:07.868: E/AndroidRuntime(14799):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
07-12 00:50:07.868: E/AndroidRuntime(14799):    ... 11 more

1 个答案:

答案 0 :(得分:0)

您需要创建另一个类。像模型类这样的东西可以被UI(Listview)和Manager(SQLIte助手类)轻松使用。因此,在从数据库查询后,使用返回的游标填充Model类的列表,您可以将其发送到Listview类,它不需要处理任何数据库类。这将是首选方法,因为UI应该具有数据库内容的抽象。

e.g。模型类

{

String firstName; 字符串lastName }

使用数据库填充 列表视图可能使用了一个arraylist,与模型类的对象一起提交

//从您的错误看,您似乎只有一个nullpointer异常,您可以发布FoodBoxPicture.java类,或者在该类的第37行检查wat是否为null 但是尝试使用像我上面提到的新类, 会让事情变得更容易