带有 ListView 和 Mysql 后端的 ORM Lite (android)
ORM Lite with ListView and Mysql backend (android)
我需要构建一个 android 应用程序,它在 ListView 中显示数据库条目列表。
我遇到了 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 数据库的连接和 returns 数据库中的每一行:
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'
我做错了什么?
此致
- 你的特殊问题是试图投射
DatabaseResults
AndroidDatabaseResults
的接口,希望它可行 -
结果表明它不是
- 你的根本问题是试图
从
Iterator
中提取 Cursor
也是不可靠的。
您应该从 ContentProvider
中获取 Cursor
,它必须使用 LoaderManager 加载,并且您的查询应该放在 ContentProvider
的 query()
方法所在的位置.
我需要构建一个 android 应用程序,它在 ListView 中显示数据库条目列表。
我遇到了 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 数据库的连接和 returns 数据库中的每一行:
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'
我做错了什么?
此致
- 你的特殊问题是试图投射
DatabaseResults
AndroidDatabaseResults
的接口,希望它可行 - 结果表明它不是 - 你的根本问题是试图
从
Iterator
中提取Cursor
也是不可靠的。
您应该从 ContentProvider
中获取 Cursor
,它必须使用 LoaderManager 加载,并且您的查询应该放在 ContentProvider
的 query()
方法所在的位置.