2010-10-24 6 views
0

Я довольно новичок в программировании на Java и в разработке Android, поэтому моя кривая обучения довольно крутая в данный момент. Кажется, я застрял на чем-то, что не могу найти достойных примеров того, как работать за ним.Android getContentResolver(). Ошибка запроса

Я написал функцию, которая получает все контакты моего телефона на основе примеров и документов, которые я нашел здесь &. Проблема в том, что я не могу справиться с этим. Следующий код работает очень хорошо;

private void fillData() { 
    // This goes and gets all the contacts 
    // TODO: Find a way to filter this only on contacts that have mobile numbers 
    cursor = getContentResolver().query(Contacts.CONTENT_URI, null, null, null, null); 

    final ArrayList<String> contacts = new ArrayList<String>(); 

    // Let's set our local variable to a reference to our listview control 
    // in the view. 
    lvContacts = (ListView) findViewById(R.id.lvContacts); 

    while(cursor.moveToNext()) { 
     contacts.add(cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME))); 
    } 

    // Make the array adapter for the listview. 
    final ArrayAdapter<String> aa; 
    aa = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            contacts); 

    // Let's sort our resulting data alphabetically. 
    aa.sort(new Comparator<String>() { 
     public int compare(String object1, String object2) { 
      return object1.compareTo(object2); 
     }; 
    }); 

    // Give the list of contacts over to the list view now. 
    lvContacts.setAdapter(aa); 
} 

Я хочу изменить запрос, отфильтровывая все контакты, у которых нет номера мобильного телефона. Я попытался что-то вроде этого;

 cursor = getContentResolver().query(Contacts.CONTENT_URI, 
     new String[] {Data._ID, Phone.TYPE, Phone.LABEL}, 
     null, null, null); 

Но когда я это делаю, он выдает ошибку исключения NullPointer. Что случилось с этим? Я получил это из примера на сайте Android, но у них было предложение where, которое не было применимо к моим потребностям, поэтому я меняю значение where на null. Это то, что ввертывает это?

Спасибо.

+0

Проблема заключается в том, что ей не нравится ссылка столбца «data2» в новом аргументе String [] {Data._ID, Phone.TYPE, Phone.LABEL}. Phone.TYPE переводит на «data2», а ошибка msg говорит, что что-то о SQLiteQueryBuilder.computeProjection не очень понравилось этой колонке. Не знаете, как это решить. – Skittles

ответ

2

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

Похоже, что использование Phone.TYPE было, безусловно, проблемой. Phone.TYPE - это константа, а не столбец данных.

Получается, что код, который работал отлично, был таким;

private void fillData() { 
    // This goes and gets all the contacts that have mobile numbers 

    final ArrayList<String> contacts = new ArrayList<String>(); 

    // Let's set our local variable to a reference to our listview control 
    // in the view. 
    lvContacts = (ListView) findViewById(R.id.lvContacts); 

    String[] proj_2 = new String[] {Data._ID, Phone.DISPLAY_NAME, CommonDataKinds.Phone.TYPE}; 
    phnCursor = managedQuery(Phone.CONTENT_URI, proj_2, null, null, null); 
    while(phnCursor.moveToNext()) { 
     if (phnCursor.getInt(2) == Phone.TYPE_MOBILE) { 
      String name = phnCursor.getString(1); 
      contacts.add(name); 
     } 
    } 

    // Make the array adapter for the listview. 
    final ArrayAdapter<String> aa; 
    aa = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_multiple_choice, 
            contacts); 

    // Let's sort our resulting data alphabetically. 
    aa.sort(new Comparator<String>() { 
     public int compare(String object1, String object2) { 
      return object1.compareTo(object2); 
     }; 
    }); 

    // Give the list of contacts over to the list view now. 
    lvContacts.setAdapter(aa); 
} 

Я ценю помощь, но, к сожалению, должен сказать, что тщательные приступы безумия и исследований в конечном итоге окупились. Надеюсь, это поможет кому-то еще.

Смежные вопросы