「已注销」 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日

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题