我对Java编程和Android开发都很陌生,所以我的学习曲线目前相当陡峭。我似乎陷入了一些我无法找到合适的例子来解决它的问题。
我写了一个功能,根据我在这里找到的示例和文档获取我所有手机的联系人。在线。我似乎无法解决的问题是这个。以下代码工作正常;
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 stuff更改为null。这是什么搞砸了?
感谢。
答案 0 :(得分: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);
}
我很感激帮助,但不幸的是必须说彻底的疯狂和研究最终得到了回报。希望这有助于其他人。