创建联系人姓名,电子邮件和缩略图图像的ListView

时间:2014-07-17 04:03:30

标签: android android-listview simplecursoradapter android-cursor

我正在尝试创建一个通过查询联系人db构建的列表视图。我正在使用simplecursoradpater并且工作正常,直到我将其限制为联系人姓名。

如何使用simplecursoradpater将电子邮件和缩略图照片绑定到视图。

我是Android的新手,这有点令人困惑。救命啊!

2 个答案:

答案 0 :(得分:0)

试试这个

    public class ViewBinder  implements SimpleCursorAdapter.ViewBinder {
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

            if(view.getId()==R.id.thumbnail) {
                    ImageView iv = (ImageView) view;
                    byte[] img = cursor.getBlob(columnIndex);
                    iv.setImageBitmap(BitmapFactory.decodeByteArray(img, 0, img.length));
                    return true;
            }



            return false;
    }
      public String getViewValue(View view, Cursor cursor) {
         String name ="";
         if(view instanceof TextView) {

               name=cursor.getString(1);

        }



        return name;
} 

}

答案 1 :(得分:0)

       Use the following code to display name,number,photo etc. 

       activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/lst_contacts"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>    

lv_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/iv_photo"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:contentDescription="desc"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_toRightOf="@+id/iv_photo"
        android:paddingBottom="10dp"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/tv_details"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/tv_name"
        android:layout_below="@+id/tv_name"
        android:textSize="16sp" />

</RelativeLayout>

Mainactivity.java

    public class MainActivity extends Activity 
    {
        SimpleCursorAdapter mAdapter;
        MatrixCursor mMatrixCursor;
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        try {

            // The contacts from the contacts content provider is stored in this  cursor

            mMatrixCursor = new MatrixCursor(new String[] { "_id", "name","photo", "details" });

        } catch (Exception e) 
        {
            e.printStackTrace();
        }
        finally 
        {
            try 
            {
                if (mMatrixCursor != null && !mMatrixCursor.isClosed()) 
                {
                    mMatrixCursor.close();
                }
            } catch (Exception e) 
            {

            }
        }

        // 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> {

        Cursor contactsCursor;
        Cursor dataCursor;

        @Override
        protected Cursor doInBackground(Void... params) {

            Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

            // Querying the table ContactsContract.Contacts to retrieve all the
            // contacts

            try {

                contactsCursor = getContentResolver().query(contactsUri, null,null, null,ContactsContract.Contacts.DISPLAY_NAME + " ASC ");

                if (contactsCursor.moveToFirst()) {

                    try {

                        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
                            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,photoPath, details });
                            }

                        } while (contactsCursor.moveToNext());

                    } catch (Exception e)
                    {
                        e.printStackTrace();

                    } finally 
                    {
                        try {

                            if (dataCursor != null && !dataCursor.isClosed())
                                dataCursor.close();

                        } catch (Exception ex) 
                        {
                            ex.printStackTrace();
                        }

                    }

                }

            } catch (Exception e) 
            {
                e.printStackTrace();

            }
            finally
            {
                try {

                    if (contactsCursor != null && !contactsCursor.isClosed())

                        contactsCursor.close();

                } catch (Exception ex) 
                {
                    ex.printStackTrace();
                }
            }

            return mMatrixCursor;
        }

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

    }