Android 关于 ContentResolver 内容解析者的简单运用

我是参照安卓入门经典做的一个查询显示手机通讯录里的联系人姓名、电话的小 demo

效果:

Android 关于 ContentResolver 内容解析者的简单运用_第1张图片

显示效果的话,这里比较随意,用到的根据自己需求改吧

实现详情:

布局

布局比较简单,我就上了一个 TextView

<TextView
    android:id="@+id/result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="14dp" />

实现

当然了,主要的是在java代码里来做,具体都有注释,请看代码:

import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private String[] columns = {   Contacts._ID,             //获得id值
                                    Contacts.DISPLAY_NAME,   //获得姓名
                                    Phone.NUMBER,             //获得电话
                                    Phone.CONTACT_ID};        //电话 id

    private TextView result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        result = (TextView) findViewById(R.id.result);
        result.setText(getQueryData());
    }

    public String getQueryData(){
        //用于保存字符串(String 和 StringBuilder 的区别不知道的网上查)
        StringBuilder stringBuilder = new StringBuilder();
        //获取 ContentResolver 对象
        ContentResolver resolver = getContentResolver();
        //通过 resolver 对象查询将结果放到光标中
        Cursor cursor = resolver.query(Contacts.CONTENT_URI, null, null, null, null);

        while(cursor.moveToNext()){

            //获得 id 值的索引
            int idIndex = cursor.getColumnIndex(columns[0]);
            //根据 id 值的索引,获得 id
            int id = cursor.getInt(idIndex);
            //获得姓名索引
            int displayNameIndex = cursor.getColumnIndex(columns[1]);
            //根据 姓名索引 ,获得姓名
            String desplay = cursor.getString(displayNameIndex);
            Cursor phone = resolver.query(Phone.CONTENT_URI, null, columns[3] + "=" + id, null, null);
            while (phone.moveToNext()){
                //获取电话索引
                int phoneNumberIndex = phone.getColumnIndex(columns[2]);
                //根据电话索引获取电话号码
                String phoneNumber = phone.getString(phoneNumberIndex);
                //将获取的数据添加到 StringBuilder
                stringBuilder.append("id:" + id + " name:" + desplay + " phone:" + phoneNumber + "\n");
            }
        }
        cursor.close();
        return stringBuilder.toString();
    }
}

String[] 里的值的含义可以自己去查一下


源码:https://github.com/iscopy/ContentProvider

你可能感兴趣的:(Android)