一起Talk Android吧(第二百三十四回:Android中的数据存储之ContentProvider二)

各位看官们大家好,上一回中咱们说的是Android中数据存储之ContentProvider的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧!

看官们,我们在上一回中介绍了如何通过ContentProvider读取联系人模块中的数据,下面是完整的代码,请大家参考:

package com.example.talk8.blogappall;

import android.Manifest;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class ActivityContentProvider extends AppCompatActivity {
    private static final String TAG = "DataStorage";

    private Button mReadContact;
    private TextView mName;
    private TextView mPhone;

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

        mReadContact = (Button)findViewById(R.id.read_contact);
        mName = (TextView)findViewById(R.id.name_contact);
        mPhone = (TextView)findViewById(R.id.phone_contact);

        mReadContact.setOnClickListener(v -> CheckPermisson());
    }

    //通过ContentProvider读取联系人中数据
    public void ReadContact() {
        Cursor cursor = null;
        Log.i(TAG, "ReadContact: ");
        try {
            cursor = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null , null, null);
            if(cursor != null) {
                while (cursor.moveToNext()) {
                    Log.i(TAG, "ReadContact: get Cursor");
                    String name = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String number = cursor.getString(
                    cursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));
                    mName.setText("Name: "+name);
                    mPhone.setText("PhoneNumber: "+number);
                }
            }
        }catch (Exception e) {
            Log.i(TAG, "ReadContact:  Exception");
            e.printStackTrace();
        }finally {
            if(cursor != null) {
                cursor.close();
            }
        }
    }

    //访问联系人需要进行权限申请,而且manifest文件中也需要添加权限
    private void CheckPermisson() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG, "CheckPermisson: ");
            ActivityCompat.requestPermissions(this, new String[]
            {Manifest.permission.READ_CONTACTS}, 1);
        }else {
            Log.i(TAG, "CheckPermisson:  permission is ok");
            ReadContact();
        }
    }

    //用户选择权限后,依据用户选择来读取数据
    @Override
    public void onRequestPermissionsResult(int requestCode, 
    @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1:
                if(grantResults.length > 0 && 
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.i(TAG, "onRequestPermissionsResult: Permisson Approved");
                    ReadContact();
                }else {
                    Log.i(TAG, "onRequestPermissionsResult: Permisson Rejected");
                    Toast.makeText(this, "Read Contact Permisssion denied", 
                    Toast.LENGTH_LONG);
                }
            default:
                break;
        }
    }
}

在代码中,我们创建了一个Button并且给它设置了监听器,通过它来读取联系人中数据。在读取联系人数据时需要申请权限,当获得用户允许使用联系人权限后才可以读取其中的数据。

程序中我们把读取的数据通过TextView控件展示到了用户界面上。我在这里就演示程序运行结果了,请大家自己动手来实践。

各位看官,关于Android中数据存储之ContentProvider的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章