2016-08-09 1 views
3

J'ai besoin de construire une application Android qui montre une liste d'entrées de base de données dans un ListView.ORM Lite avec ListView et Mysql backend (android)

je suis tombé à this thread et essayé les éléments suivants

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

Où salon est une entité et ParlorAsync est une AsyncTask qui gère la connexion à la base de données Mysql et retourne toutes les lignes de la base de données:

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

Comme vous pouvez le voir, j'ai utilisé un JdbcConnectionSource et c'est là que le problème commence. Il me dit maintenant

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

C'est le 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> 

Ce sont mes dépendances 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' 

Qu'est-ce que je fais mal?

Meilleures salutations

Répondre

1
  1. Votre problème particulier tente de lancer DatabaseResults interface pour AndroidDatabaseResults en espérant que cela est réalisable - résultat montre que ce n'est pas
  2. Votre problème fondamental tente de extrait Cursor de Iterator qui est également peu fiable.

Vous devriez obtenir Cursor de ContentProvider qui doit être chargé à l'aide LoaderManager et votre requête doit être placé là où la méthode query() de ContentProvider se trouve.

+0

Comment suis-je censé faire cela? J'ai une base de données mysql externe (pas locale) et j'ai réussi à lire/écrire en utilisant JdbcConnectionSource, mais j'ai encore besoin d'un Cursor depuis ce JdbcConnectionSource ... – LimitX

+0

Vous devriez envelopper vos requêtes jdbc avec 'CursorProvider' - c'est tout – barmaley