2013-08-12 56 views
1

我需要從android聯繫人列表中獲取聯繫人姓名和相關地址。我得到聯繫人姓名和他們的電話號碼,但不幸的是無法獲取地址詳細信息。當我選擇聯繫地址時,每次都會返回空值。當我從聯繫人列表地址數據中選擇聯繫人姓名和地址未檢索

我搜索了谷歌以及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

最後我解決這個問題,請找到下面的答案,

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 
    } 
} 
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)); 
     } 
+0

嗨Farha,Thanx的答覆,但我想從電話的聯繫人列表中檢索合同地址。但你的答案是從表中獲取數據。任何方式thnx答覆。 –

+0

@ AhamedSalik-contract這是什麼,它保存在sql數據庫或其他地方。 – FarhaSameer786

+0

@ FarhaSameer786-對不起其聯繫..謝謝你的答覆..最後我解決了這個問題。請在下面找到答案 –

相關問題