2015-12-31 2 views
0

Я пытаюсь получить список пользователей Parse, а затем сравнить их с контактами в телефоне пользователей, а затем показать только те контакты, у которых есть номер в бэкэнде Parse, однако код, который у меня есть сейчас, не работает, как я ожидаю, и я считаю, что он имеет какое-то отношение к списку, который возвращает Parse (возможно, мне нужно его преобразовать, потому что я беру весь Object, и мне нужно только одно поле (. номер телефона, который = имя пользователя в моем синтаксическом бэкэнде)

Вот код, чтобы получить список синтаксического:
Показывать только контакты на основе списка номеров телефонов, полученных из анализа

// Get parse users 
     String [] phoneNumberList = {"DUMMY NUMBER1", "DUMMY NUMBER2"}; 
     ParseQuery<ParseUser> query = ParseUser.getQuery(); { 
      query.whereContainedIn("username", Arrays.asList(phoneNumberList)); 
      query.findInBackground(new FindCallback<ParseUser>() { 
       public void done (List<ParseUser> list, ParseException e){ 
        if (e == null) { 
         mBinderPhoneNumbers = list; 
         Log.d("TAG", "mBinderPhoneNumbers from onCreate: " + mBinderPhoneNumbers); 
         addContactsInList(); 
        } else { 
         // Something went wrong. 
         Log.e("TAG", "User query error: " + e); 
        } 
       } 
      }); 
     } 



Вот код addContactsInList, где я пытаюсь использовать список только контакты нагрузки, которые находятся во внутреннем интерфейсе: Разбор

private void addContactsInList() { 
     // TODO Auto-generated method stub 


     Thread thread = new Thread() { 
      @Override 
      public void run() { 

       showPB(); 

       try { 

        Cursor phones = getContentResolver().query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, null, null, null); 

        try { 
         ContactsListClass.phoneList.clear(); 
        } catch (Exception e) { 

        } 


        while (phones.moveToNext()) { 


         Log.d("TAG", "mBinderPhoneNumbers from AddContactsInList:" + mBinderPhoneNumbers); 
         if (Arrays.asList(mBinderPhoneNumbers).contains(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)))) { 
          String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
          String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)); 
          String phoneImage = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
          ContactObject cp = new ContactObject(); 
          cp.setName(phoneName); 
          cp.setNumber(phoneNumber); 
          cp.setImage(phoneImage); 
          ContactsListClass.phoneList.add(cp); 
         } 
        } 
        phones.close(); 
        lv = new ListView(context); 
        lv.setLayoutParams(new LayoutParams(
          LayoutParams.MATCH_PARENT, 
          LayoutParams.MATCH_PARENT)); 

        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          // TODO Auto-generated method stub 
          llContainer.addView(lv); 
         } 
        }); 

        Collections.sort(ContactsListClass.phoneList, 
          new Comparator<ContactObject>() { 
           @Override 
           public int compare(ContactObject lhs, 
                ContactObject rhs) { 
            return lhs.getName().compareTo(
              rhs.getName()); 
           } 
          }); 

        objAdapter = new ContactsAdapter(AddContactsActivity.this, 
          ContactsListClass.phoneList); 
        lv.setAdapter(objAdapter); 
        lv.setOnItemClickListener(new OnItemClickListener() { 

         @Override 
         public void onItemClick(AdapterView<?> parent, 
               View view, int position, long id) { 

          CheckBox chk = (CheckBox) view 
            .findViewById(R.id.contactcheck); 
          ContactObject bean = ContactsListClass.phoneList 
            .get(position); 
          if (bean.isSelected()) { 
           bean.setSelected(false); 
           chk.setChecked(false); 
          } else { 
           bean.setSelected(true); 
           chk.setChecked(true); 
          } 

         } 
        }); 

       } catch (Exception e) { 

        e.printStackTrace(); 

       } 

       hidePB(); 

      } 
     }; 

     thread.start(); 

    } 

ответ

0

Так мне удалось понять это сам. Я изменил свой код, сначала получив список из Parse, чтобы отобразить массив только имен пользователей.

ParseQuery<ParseUser> query = ParseUser.getQuery(); { 
    query.whereContainedIn("username", Arrays.asList(phoneNumberList)); 
    query.findInBackground(new FindCallback<ParseUser>() { 
     public void done (List<ParseUser> list, ParseException e){ 
      if (e == null) { 
       mBinderPhoneNumbers = new ArrayList<>(); 
       for (int i = 0; i < list.size(); i++) { 
        mBinderPhoneNumbers.add(list.get(i).getUsername()); 
        addContactsInList(); 
       } 
      } else { 
       // Something went wrong. 
       Log.e("TAG", "User query error: " + e); 
      } 
     } 
    }); 
} 



Затем я изменил следующую строку коды и удалить Arrays.asList() часть коды, так как я уже имеет дела с ArrayList:

while (phones.moveToNext()) { 
         if (mBinderPhoneNumbers.contains(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)))) { 
          String phoneName = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
          String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)); 


String phoneImage = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
         ContactObject cp = new ContactObject(); 
         cp.setName(phoneName); 
         cp.setNumber(phoneNumber); 
         cp.setImage(phoneImage); 
         ContactsListClass.phoneList.add(cp); 
        } 
       } 
Смежные вопросы