2013-03-04 137 views
0

我正在使用「Calls.CONTENT_URI」內容提供者。我已經回顧了列名,但現在我想讓我們來說說,這個內容提供者中列名「name」的所有名稱。獲取內容提供商中所有名稱的列表

我有下面的代碼:

uri = Calls.CONTENT_URI; 

    String[] projection = {"name"}; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sort = null; 


    resolver = getContentResolver(); 

    cursor = resolver.query(uri, projection, selection, selectionArgs, sort); 
    Log.i("TUTORIAL", "counts :"+cursor.getCount());  

    String s; 
    cursor.moveToFirst(); 

    for(int x=0; x<cursor.getCount(); x++){ 

     s = cursor.getString(x); 
     Log.i("TUTORIAL", ""+s); 

     //cursor.moveToNext(); 


    } 

但這retrives只有一個名字。我想有保存在我的手機像所有名單:

約翰 彼得 馬克 蘇茜 。 。 X

但現在我得到的只是一個名稱,如:

彼得。 希望我已經清楚了。

有什麼問題?提前感謝您的幫助。

回答

0

我認爲這會幫助你

 ArrayList<String> nameList = new ArrayList<String>(); 
    String[] projection = {"name"}; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sort = null; 
    resolver = getContentResolver(); 
    cursor = resolver.query(uri, projection, selection, selectionArgs, sort); 
    Log.i("TUTORIAL", "counts :"+cursor.getCount());  
    String s; 
    if(cursor.moveToFirst()) { 
     do { 
      nameList.add(cursor.getString(0)); 
      //your code 
      //s = cursor.getString(x); 
      Log.i("TUTORIAL", ""+cursor.getString(0)); 
     }while(cursor.moveToNext()); 
    } 
+0

以及如何獲得從表中的實際名稱?我想我不應該使用「cursor.getString(x);」? – rootpanthera 2013-03-04 13:21:15

+0

我編輯了我的答案。試試這個新的。 – 2013-03-04 13:33:31

+0

它正在工作。謝謝你的幫助和時間。 – rootpanthera 2013-03-04 15:14:29

0

你可以試試這個,它的工作對我來說:

public void readContacts() { 
     Cursor cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, null); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 

        // Get contact id (id) 
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 

        // Get contact name (displayName) 
        String displayName = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

       } 
      } 
     } 
     cur.close(); 
    } 
0

這是代碼。

public class MainActivity extends AppCompatActivity { 
SimpleCursorAdapter mAdapter; 
MatrixCursor mMatrixCursor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // The contacts from the contacts content provider is stored in this cursor 
    mMatrixCursor = new MatrixCursor(new String[] { "_id","name","photo","details"}); 

    // Adapter to set data in the listview 
    mAdapter = new SimpleCursorAdapter(getBaseContext(), 
      R.layout.lv_layout, 
      null, 
      new String[] { "name","photo","details"}, 
      new int[] { R.id.tv_name,R.id.iv_photo,R.id.tv_details}, 0); 

    // Getting reference to listview 
    ListView lstContacts = (ListView) findViewById(R.id.lst_contacts); 

    // Setting the adapter to listview 
    lstContacts.setAdapter(mAdapter); 

    // Creating an AsyncTask object to retrieve and load listview with contacts 
    ListViewContactsLoader listViewContactsLoader = new ListViewContactsLoader(); 

    // Starting the AsyncTask process to retrieve and load listview with contacts 
    listViewContactsLoader.execute(); 
} 

/** An AsyncTask class to retrieve and load listview with contacts */ 
private class ListViewContactsLoader extends AsyncTask<Void, Void, Cursor> { 

    @Override 
    protected Cursor doInBackground(Void... params) { 
     Uri contactsUri = ContactsContract.Contacts.CONTENT_URI; 

     // Querying the table ContactsContract.Contacts to retrieve all the contacts 
     Cursor contactsCursor = getContentResolver().query(contactsUri, null, null, null,ContactsContract.Contacts.DISPLAY_NAME + " ASC "); 

     if(contactsCursor.moveToFirst()){ 
      do{ 
       long contactId = contactsCursor.getLong(contactsCursor.getColumnIndex("_ID")); 

       Uri dataUri = ContactsContract.Data.CONTENT_URI; 

       // Querying the table ContactsContract.Data to retrieve individual items like 
       // home phone, mobile phone, work email etc corresponding to each contact 
       Cursor dataCursor = getContentResolver().query(dataUri, null, 
         ContactsContract.Data.CONTACT_ID + "=" + contactId, 
         null, null); 

       String displayName=""; 
       String nickName=""; 
       String homePhone=""; 
       String mobilePhone=""; 
       String workPhone=""; 
       //String photoPath="" + R.drawable.blank; 
       byte[] photoByte=null; 
       String homeEmail=""; 
       String workEmail=""; 
       String companyName=""; 
       String title=""; 

       if(dataCursor.moveToFirst()){ 
        // Getting Display Name 
        displayName = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME)); 
        do{ 

         // Getting NickName 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE)) 
          nickName = dataCursor.getString(dataCursor.getColumnIndex("data1")); 

         // Getting Phone numbers 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){ 
          switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){ 
           case ContactsContract.CommonDataKinds.Phone.TYPE_HOME : 
            homePhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE : 
            mobilePhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_WORK : 
            workPhone = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
            break; 
          } 
         } 

         // Getting EMails 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) { 
          switch(dataCursor.getInt(dataCursor.getColumnIndex("data2"))){ 
           case ContactsContract.CommonDataKinds.Email.TYPE_HOME : 
            homeEmail = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
            break; 
           case ContactsContract.CommonDataKinds.Email.TYPE_WORK : 
            workEmail = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
            break; 
          } 
         } 

         // Getting Organization details 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)){ 
          companyName = dataCursor.getString(dataCursor.getColumnIndex("data1")); 
          title = dataCursor.getString(dataCursor.getColumnIndex("data4")); 
         } 

         // Getting Photo 
         if(dataCursor.getString(dataCursor.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)){ 
          photoByte = dataCursor.getBlob(dataCursor.getColumnIndex("data15")); 

          if(photoByte != null) { 
           Bitmap bitmap = BitmapFactory.decodeByteArray(photoByte, 0, photoByte.length); 

           // Getting Caching directory 
           File cacheDirectory = getBaseContext().getCacheDir(); 

           // Temporary file to store the contact image 
           File tmpFile = new File(cacheDirectory.getPath() + "/wpta_"+contactId+".png"); 

           // The FileOutputStream to the temporary file 
           try { 
            FileOutputStream fOutStream = new FileOutputStream(tmpFile); 

            // Writing the bitmap to the temporary file as png file 
            bitmap.compress(Bitmap.CompressFormat.PNG,100, fOutStream); 

            // Flush the FileOutputStream 
            fOutStream.flush(); 

            //Close the FileOutputStream 
            fOutStream.close(); 

           } catch (Exception e) { 
            e.printStackTrace(); 
           } 
           // photoPath = tmpFile.getPath(); 
          } 
         } 
        }while(dataCursor.moveToNext()); 
        String details = ""; 

        // Concatenating various information to single string 
        if(homePhone != null && !homePhone.equals("")) 
         details = "HomePhone : " + homePhone + "\n"; 
        if(mobilePhone != null && !mobilePhone.equals("")) 
         details += "MobilePhone : " + mobilePhone + "\n"; 
        if(workPhone != null && !workPhone.equals("")) 
         details += "WorkPhone : " + workPhone + "\n"; 
        if(nickName != null && !nickName.equals("")) 
         details += "NickName : " + nickName + "\n"; 
        if(homeEmail != null && !homeEmail.equals("")) 
         details += "HomeEmail : " + homeEmail + "\n"; 
        if(workEmail != null && !workEmail.equals("")) 
         details += "WorkEmail : " + workEmail + "\n"; 
        if(companyName != null && !companyName.equals("")) 
         details += "CompanyName : " + companyName + "\n"; 
        if(title != null && !title.equals("")) 
         details += "Title : " + title + "\n"; 

        // Adding id, display name, path to photo and other details to cursor 
        mMatrixCursor.addRow(new Object[]{ Long.toString(contactId),displayName,null,details}); 
       } 
      }while(contactsCursor.moveToNext()); 
     } 
     return mMatrixCursor; 
    } 

    @Override 
    protected void onPostExecute(Cursor result) { 
     // Setting the cursor containing contacts to listview 
     mAdapter.swapCursor(result); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

}