2016-08-09 21 views
3

Ich muss eine Android-Anwendung erstellen, die eine Liste der Datenbankeinträge in einer ListView zeigt.ORM Lite mit ListView und Mysql Backend (Android)

stieß ich auf zu this thread und versuchte, die folgenden

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); 

Wo Salon ein Unternehmen ist und ParlorAsync ist ein AsyncTask, die die Verbindung zur MySQL-Datenbank behandelt und gibt jede Zeile in der Datenbank:

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()); 

Wie Sie sehen können, habe ich eine JdbcConnectionSource verwendet, und hier beginnt das Problem. Es sagt mir jetzt

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

Dies ist die list_view_template.xml

ist
<?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> 

sind meine gradle Abhängigkeiten

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' 

sind Was mache ich falsch?

Mit freundlichen Grüßen

Antwort

1
  1. Ihr besonderes Problem versucht DatabaseResults Schnittstelle zu AndroidDatabaseResults werfen Hoffnung, dass es praktikabel ist - Ergebnis zeigt, dass es nicht
  2. Ihr grundsätzliches Problem versucht, Extrakt Cursor von Iterator der ist auch unzuverlässig.

Sie sollten Cursor von ContentProvider erhalten, die in dem query() Methode der ContentProvider sitzt platziert werden mit LoaderManager und Ihre Abfrage geladen werden muss sollte.

+0

Wie soll ich das tun? Ich habe eine externe MySQL-Datenbank (nicht lokal) und ich es geschafft, lesen/schreiben JdbcConnectionSource verwenden, aber ich muss noch einen Cursor von diesem JdbcConnectionSource bekommen ... – LimitX

+0

Sie sollten Ihre jdbc Abfragen mit 'CursorProvider' wickeln - das ist es – barmaley