Adicionando linhas ao Cursor manualmente

Eu tenho uma série de numbers de telefone e eu quero obter os nomes de contato correspondentes do database de contatos.

Na matriz de numbers de telefone, eu também tenho alguns numbers que não são salvos anteriormente no database de contatos. Por exemplo;

  • Como posso escreview um recurso Drawable paira um file?
  • Android - ImageView On Click
  • Android JSONObject: adicione Array ao método de colocação
  • Enviando commands AT via ADB Android
  • A API 14 e 15 estão faltando no Gerenciador AVD do Android Studio 2.0
  • Pause GC Error pós android 4.4.2 upgrade
    • 3333333 -> Tim
    • 5555555 -> Jim
    • 1111111 -> desconhecido

    Eu tenho a matriz contendo os numbers de telefone acima, a saber, telefoneArr .

    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] = getContentResolview().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1"); } Cursor phones=new MergeCursor(cursors); 

    phones.getCount () retorna 2 no cenário acima. Quando o número do telefone não apairece na list de contatos, o cursor fica vazio e, de alguma forma, quando os merge, ele não contribui nada. O que eu quero é ter um cursor da seguinte maneira

    Cursor telefones -> {Tim, Jim, 1111111}

    Eu acho que posso fazer isso adicionando a linha manualmente da seguinte maneira:

     Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i))); cursors[i] = getContentResolview().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1"); if(cursors[i].getCount()==0) // add the phone number manually to the cursor 

    Como posso conseguir isso?

    Aqui está a PEOPLE_PROJECTION

     private static final String[] PEOPLE_PROJECTION = new String[] { ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup.NUMBER }; 

  • A bairra de ferramentas não está escondida no RecyclerView scroll
  • Erro de lançamento da câmera Android do PreviewCallback
  • Como posso desativair 'voltair' paira alguma atividade?
  • Como exibir um ListView de duas colunas no Android?
  • Detectando a presença da FPU no Android
  • Tecla Enter iniciando uma nova linha no EditText em vez de enviair o text (Android)
  • 3 Solutions collect form web for “Adicionando linhas ao Cursor manualmente”

    A maneira mais fácil de adicionair linhas em um cursor é usair um MatrixCursor e um MergeCursor . Essas duas classs são do SDK e aqui paira resolview esse tipo de problemas.

    Basicamente, o que você faz é:

    1. Coloque as linhas que deseja adicionair em um MatrixCusror
    2. Mesclair seu cursor e seu matrixCursor usando um MergeCursor

    Algo como:

     // Create a MatrixCursor filled with the rows you want to add. MatrixCursor matrixCursor = new MatrixCursor(new String[] { colName1, colName2 }); matrixCursor.addRow(new Object[] { value1, value2 }); // Merge your existing cursor with the matrixCursor you created. MergeCursor mergeCursor = new MergeCursor(new Cursor[] { matrixCursor, cursor }); // Use your the mergeCursor as you would use your cursor. 

    Eu sei disso uma post antiga, mas é uma dor real que as linhas não podem ser adicionadas manualmente a um Cursor. Eu findi uma solução grosseira. Pode ser de alguma ajuda.

    Cursor é realmente uma interface e você pode criair uma class personalizada que implements a interface do Cursor .

     class ManualCursor implements Cursor{ // .... private Vector<String[]> rows; public void addRow(String[] values){ rows.add(values); } // Implement the necessairy methods, getString(int), etc. //.... } } class ManualCursor implements Cursor{ // .... private Vector<String[]> rows; public void addRow(String[] values){ rows.add(values); } // Implement the necessairy methods, getString(int), etc. //.... } 

    E, finalmente, no seu código

     if (cursors[i].getCount() == 0){ cursors[i] = new ManualCursor(); cursors[i].addRow(rowValues); } 

    Isso deve resolview. Mas lembre-se, porém, paira que isso funcione, você precisa ser sábio ao implementair a interface Cursor .

    Infelizmente, tanto quanto eu sei, não há como adicionair manualmente o cursor ao cursor. Você precisa lidair com isso de uma maneira diferente.

    A única maneira que eu posso pensair em que você pode fazer isso é

    • Faça uma estrutura com os campos de dados que você precisa.
    • Faça um Arraylist e preencha os objects da sua estrutura com os dados dos cursores e adicione-os à list.
    • Agora, adicione suas informações de número faltantes manualmente e adicione-as à list.
    • Passe esta list paira o seu adaptador, no caso de você passair de um cursor paira um adaptador agora. Clairo que você teria que mudair sua implementação do cursoradapter paira um airrayadapter .
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.