2017-10-15 5 views
0

Ce code lit toutes les entrées de ma table sqlite et les place dans une liste. J'ai essayé de réduire le temps de chargement avec des Threads et de les avoir tous terminés avec join() avant de retourner ma liste. Mais si je fais les querys en tant que Threads, je reçois quelques entrys deux fois.SQLite réduit le temps dans la boucle

public ArrayList<ModelTura_spieler> getAllTura_spieler() { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    final ArrayList<ModelTura_spieler> tura_spielerList = new ArrayList<ModelTura_spieler>(); 
    String selectQuery = "SELECT * FROM tura_spieler"; 
    final Cursor c = db.rawQuery(selectQuery, null); 

     for(c.moveToFirst(); c.getPosition()!=getTura_spielerCount()-1 ; c.moveToNext()){ 
        ModelTura_spieler tura_spieler = getModelTura_spielerFromCursor(c); 
        tura_spielerList.add(tura_spieler); 
       } 
    return tura_spielerList; 
} 

Comment réduire le temps de requête de cette boucle for avec Threads?

Répondre

0

Vous ne pouvez pas. Sqlite n'est pas thread-safe, ce qui signifie que votre SQLiteHelper verrouille votre base de données par défaut.

La raison en est que vous ne pouvez accéder que par une connexion/transaction à la fois.

Définir les champs que vous souhaitez saisir pour le faire en utilisant un peu plus rapide:

SELECT field1,field2,anotherfield FROM tura_spieler 

Vous pouvez également avoir un index qui stimulent votre aswell de vitesse.

Si vous souhaitez interroger des champs basés sur d'autres, vous souhaitez les joindre.

Si you'r nouveau pour Android et SQLite vous devriez jeter un oeil à une nouvelle bibliothèque Android appelée Room qui offre un facile à utiliser paging library