【问题标题】:ORM Lite with ListView and Mysql backend (android)带有 ListView 和 Mysql 后端的 ORM Lite (android)
【发布时间】:2016-12-15 04:50:12
【问题描述】:

我需要构建一个在 ListView 中显示数据库条目列表的 android 应用程序。

我遇到this thread 并尝试了以下

CloseableIterator<Parlor> iterator = new ParlorAsync().execute().get();
AndroidDatabaseResults adr = (AndroidDatabaseResults) iterator.getRawResults();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.list_view_template,
                adr.getRawCursor(),
                new String[]{""},
                new int[]{R.id.parlor_name});
parlor_list.setAdapter(adapter);

其中 parlor 是一个实体, ParlorAsync 是一个 AsyncTask,它处理与 Mysql 数据库的连接并返回数据库中的每一行:

JdbcConnectionSource source = new JdbcConnectionSource("jdbc:mysql://192.168.1.1:3306/mydatabase");
source.setUsername("user");
source.setPassword("password");
Dao<Parlor, Integer> parlorDao = DaoManager.createDao(source, Parlor.class);
QueryBuilder<Parlor, Integer> queryBuilder = parlorDao.queryBuilder();
queryBuilder.selectColumns("name");
queryBuilder.orderBy("name", true);
return parlorDao.iterator(queryBuilder.prepare());

如您所见,我使用了 JdbcConnectionSource,这就是问题的开始。它现在告诉我

com.j256.ormlite.jdbc.JdbcDatabaseResults cannot be cast to com.j256.ormlite.android.AndroidDatabaseResults

这是 list_view_template.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".ParlorListView">

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/parlor_name" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</RelativeLayout>

这些是我的 gradle 依赖项

compile group: 'com.j256.ormlite', name: 'ormlite-core', version: '4.48'
compile group: 'com.j256.ormlite', name: 'ormlite-jdbc', version: '4.48'
compile group: 'com.j256.ormlite', name: 'ormlite-android', version: '4.48'
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.6'

我做错了什么?

最好的问候

【问题讨论】:

    标签: android ormlite


    【解决方案1】:
    1. 您的特殊问题是尝试投射DatabaseResultsAndroidDatabaseResults 的接口希望它是可行的- 结果显示不是
    2. 您的根本问题是试图 从Iterator 中提取Cursor,这也是不可靠的。

    您应该从必须使用 LoaderManager 加载的 ContentProvider 获取 Cursor,并且您的查询应该放在 ContentProviderquery() 方法所在的位置。

    【讨论】:

    • 我该怎么做?我有一个外部 mysql 数据库(不是本地的),我设法使用 JdbcConnectionSource 进行读/写,但我仍然需要从这个 JdbcConnectionSource 中获取一个游标 ...
    • 你应该用 CursorProvider 包装你的 jdbc 查询 - 就是这样
    猜你喜欢
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多