「已注销」 2022-05-20 12:21 采纳率: 66.7%
浏览 32
已结题

安卓申请访问通讯录信息并返回至ListView,listview没有获取到值

创建了联系人类Info,和对应列表,测试时候发现ListView没有获取到值,在getInfo里向list添加项是成功的,但在onCreate输出list长度为0 ,另请教resolver.query访问电话号码的列名是什么,感谢
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;



public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayList list;
int icon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
icon=R.drawable.icon;
list=new ArrayList();
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);
listView=findViewById(R.id.lv);
Toast.makeText(this,String.valueOf(list.size()),Toast.LENGTH_SHORT).show();
MyBaseAdapter adapter=new MyBaseAdapter();
listView.setAdapter(adapter);
}
class MyBaseAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view=View.inflate(MainActivity.this,R.layout.layout,null);
        TextView name=view.findViewById(R.id.name);
        TextView number=view.findViewById(R.id.number);
        ImageView iv=view.findViewById(R.id.image);
        name.setText(list.get(position).getName());
        number.setText(list.get(position).getNumber());
        iv.setBackgroundResource(icon);
        return view;
    }
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode==1){
        if (list != null) {
            list.clear();
        }
        for(int i=0;i<permissions.length;i++){
            if(grantResults[i]== PackageManager.PERMISSION_GRANTED){
                getInfo();
            }else{
                Toast.makeText(this," "+"权限"+permissions[i]+"申请失败,不能读取联系人信息",Toast.LENGTH_SHORT).show();
            }
        }
    }
}
public void getInfo() {
    Uri uri = Uri.parse("content://com.android.contacts/contacts");
    ContentResolver resolver = getContentResolver();
    Cursor cursor = resolver.query(uri,
            new String[]{"display_name"}, null, null, null);
    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            String name = cursor.getString(0);
            String number ="";
            Info info = new Info(name, number);
            list.add(info);
        }
        cursor.close();
    }
}

}

  • 写回答

2条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-05-22 10:15
    关注
    @SuppressLint("Range")
    private void readContacts() {
        ContentResolver resolver = activity.getContentResolver();
        Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null,
                null,
                null,
                null);
        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                 String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                 String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                Log.e("", "name = " + name + " number = " + number);
            }
            cursor.close();
        }
    }
    

    保证动态权限申请成功,我用这个方法可以获取到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 5月20日

悬赏问题

  • ¥100 关于加载卡的问题有能知道这个要怎么处理吗?
  • ¥100 rtmpose姿态评估
  • ¥15 java 通过反射找路径下的类,打包后就找不到
  • ¥15 通联支付网上收银统一下单接口
  • ¥15 angular有偿编写,
  • ¥15 centos7系统下abinit安装时make出错
  • ¥15 hbuildex运行微信小程序报错
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。