我需要从android中的联系人列表中获取联系人姓名和相关地址。我收到了联系人姓名和电话号码,但遗憾的是无法获取地址详细信息。当我选择联系地址时,它每次都会返回null。
我搜索了谷歌以及stackoverflow。但无法找到解决方案。当我搜索时发现,地址详细信息在另一个单独的表中,但是我用id搜索了该表,但是没有从地址表返回数据。所以请帮我解决这个问题。提前谢谢,
请找到我用来获取联系方式的代码段,
package com.contact.contacts;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.app.Activity;
import android.database.Cursor;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class MainActivity extends Activity implements OnItemClickListener{
private ListView listView;
private List<ContactBean> list = new ArrayList<ContactBean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(this);
Cursor cur_phone = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
null, null);
while (cur_phone.moveToNext()) {
String name = cur_phone
.getString(cur_phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = cur_phone
.getString(cur_phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String id = cur_phone.getString(cur_phone
.getColumnIndex(ContactsContract.Contacts._ID));
System.out.println("Cursor size : contact Name : "+name);
System.out.println("Cursor size : contact number : "+phoneNumber);
System.out.println("Cursor size : id : "+id);
Cursor cursor_address = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
cursor_address.close();
// get the data package containg the postal information for the contact
cursor_address = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[]{ StructuredPostal.STREET,
StructuredPostal.CITY,
StructuredPostal.POSTCODE},
ContactsContract.Data.CONTACT_ID + "=? AND " +
StructuredPostal.MIMETYPE + "=?",
new String[]{String.valueOf(id), StructuredPostal.CONTENT_ITEM_TYPE},
null);
cursor_address.moveToFirst();
System.out.println("Cursor size : Outside while");
while (cursor_address.moveToNext()) {
System.out.println("Cursor size : Inside while");
// This while statement is not running
if(cursor_address != null && cursor_address.moveToFirst())
{
if (cursor_address.getCount() > 0) {
String Street = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.STREET));
System.out.println("Address : "+Street);
String Postcode = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.POSTCODE));
String City = cursor_address.getString(cursor_address.getColumnIndex(StructuredPostal.CITY));
}
else
{
System.out.println("Cursor is : " + cursor_address);
Log.i("Contact : ", "Cursor :" + cursor_address);
}
}
else
{
System.out.println("Cursor Null : " + cursor_address);
Log.i("Contact App : ", "Cursor null" + cursor_address);
}
}
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:0)
public ArrayList<String> getName(){
ArrayList<String> mdetail=new ArrayList<String>();
SQLiteDatabase db = this.getWritableDatabase();
String selectQuery = "SELECT "+COLUMN_PERSON_NAME+" from "+TABLE_DETAIL;
Cursor mCursor = db.rawQuery(selectQuery, null);
if(mCursor.moveToFirst()){
do {
mdetail.add(mCursor.getString(mCursor.getColumnIndex(COLUMN_PERSON_NAME)));
} while (mCursor.moveToNext());
}
mCursor.close();
db.close();
return mdetail;
}
if Your data is Sucessfully added in your database just use this code to retreive from database and show in list view like this....
if (!db.exists()) {
} else {
mListName=baseManager.getName();
listview.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,mListName));
}
答案 1 :(得分:0)
最后我解决了这个问题,请找到以下答案,
package com.contact.contacts;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnItemClickListener {
private ListView listView;
private List<ContactBean> list = new ArrayList<ContactBean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.list);
listView.setOnItemClickListener(this);
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String phone = null;
String poBox = null;
String street = null;
String city = null;
String state = null;
String postalCode = null;
String country = null;
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
//Query for phone
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
// Get the phone number
phone = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
pCur.close();
}
String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] addrWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI,
null, addrWhere, addrWhereParams, null);
while(addrCur.moveToNext()) {
poBox = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
street = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
city = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
state = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
postalCode = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
country = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String type = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
}
addrCur.close();
ContactBean objContact = new ContactBean();
objContact.setName(name);
objContact.setPhoneNo(phone);
objContact.setAddressLine1(poBox);
objContact.setAddressLine2(street);
objContact.setCity(city);
objContact.setPostalCode(postalCode);
objContact.setCountry(country);
list.add(objContact);
ContactAdapter objAdapter = new ContactAdapter(ContactActivity.this,
R.layout.single_contact, list);
listView.setAdapter(objAdapter);
if (null != list && list.size() != 0) {
Collections.sort(list, new Comparator<ContactBean>() {
@Override
public int compare(ContactBean lhs, ContactBean rhs) {
return lhs.getName().compareTo(rhs.getName());
}
});
} else {
showToast("No Contact Found!!!");
}
}
}
}
private void showToast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public void onItemClick(AdapterView<?> listview, View v, int position,
long id) {
// Event for item click
}
}