Ajout de lignes dans Cursor manuellement
J'ai un tableau de numéros de téléphone et je veux obtenir le contact correspondant noms à partir de la base de données de contacts.
Dans le tableau des numéros de téléphone, j'ai aussi quelques numéros qui ne sont pas enregistrées avant de la base de données de contact. Par exemple;
- 3333333 -> Tim
- 5555555 -> Jim
- 1111111 -> inconnu
J'ai le tableau contenant les numéros de téléphone indiqué ci-dessus, à savoir phoneArr.
int size=phoneArr.size();
if(size>0){
Cursor[] cursors=new Cursor[size];
for(int i=0;i<size;i++){
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
}
Cursor phones=new MergeCursor(cursors);
téléphones.getCount() retourne la valeur 2 dans le scénario ci-dessus. Lorsque le numéro de téléphone n'apparaît pas dans la liste des contacts, le curseur se transforme en vide et en quelque sorte quand je les fusionner elle ne contribue pas du tout. Ce que je veux, c'est avoir un curseur comme suit
Curseur téléphones -> {Tim, Jim, 1111111}
Je pense que je peux le faire en ajoutant la ligne manuellement comme suit:
Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
if(cursors[i].getCount()==0)
//add the phone number manually to the cursor
Comment puis-je y parvenir?
Ici est la PEOPLE_PROJECTION
private static final String[] PEOPLE_PROJECTION = new String[] {
ContactsContract.PhoneLookup._ID,
ContactsContract.PhoneLookup.DISPLAY_NAME,
ContactsContract.PhoneLookup.NUMBER
};
source d'informationauteur 0x5f3759df
Vous devez vous connecter pour publier un commentaire.
Façon la plus simple pour ajouter des lignes dans un curseur est d'utiliser un MatrixCursor et un MergeCursor.
Ces deux classes sont dans le kit de développement et ici pour résoudre ce genre de problèmes.
Fondamentalement, ce que vous avez à faire est de :
MatrixCusror
cursor
et votrematrixCursor
à l'aide d'unMergeCursor
Quelque chose comme:
- Je utiliser une solution qui fait le tour de tous mes besoins différents, et ce qui est plus simple que de mettre en place le Curseur.
Voici un exemple où j'ai ajouter de la "liste de lecture" des lignes à un Curseur, extrait de la Mediastore. J'ai ajouter des lignes au premier index du Curseur d'origine :
Curseur d'origine a 2 colonnes (int,String), j'ai donc construire un tableau de lignes supplémentaires objets.
Je sais que ce un vieux post, mais c'est une véritable douleur que les lignes ne peuvent pas être ajoutés manuellement à l'aide d'un Curseur. Je suis venu avec un brut solution. Il peut être de quelque secours.
Cursor
est en fait uninterface
et vous pouvez en créer un personnaliséclass
queimplements
laCursor
interface.Et enfin dans votre code
Cela devrait le faire. Mais soyez averti, cependant, pour que cela fonctionne, vous devez être prudent lors de l'exécution de la
Cursor
interface.Malheureusement, autant Que je sache, il n'y a aucun moyen que vous pouvez manuellement ajouter des données à l'aide du curseur. Vous avez besoin de les aborder d'une manière différente.
La seule façon que je peux penser à ce que vous pouvez faire c'est
cursoradapter
la mise en œuvre d'unarrayadapter
.