Android:返回null的视图

Android:返回null的视图,android,android-fragments,kotlin,mvp,rxpermissions,Android,Android Fragments,Kotlin,Mvp,Rxpermissions,我正在尝试获取联系人并将其显示在列表中。我正在使用RxPermissions。这里的问题是,当我第一次允许权限时,视图返回null并显示空列表,即使列表中有项目。但是,当我回到上一个活动并回来时,它工作得很好 ContactsFragment.kt override fun onResume() { super.onResume() if (isPermissionGranted) { Timber.d("Permission is gra

我正在尝试获取联系人并将其显示在列表中。我正在使用RxPermissions。这里的问题是,当我第一次允许权限时,视图返回null并显示空列表,即使列表中有项目。但是,当我回到上一个活动并回来时,它工作得很好

ContactsFragment.kt

override fun onResume() {
        super.onResume()
        if (isPermissionGranted) {
            Timber.d("Permission is granted")
            contactsPresenter.fetchContacts(context)
            noPermissionsWarning.visibility = View.GONE
        } else {
            noPermissionsWarning.visibility = View.VISIBLE
            showContactList(ArrayList()) // Show empty list when permissions not granted
        }
    }
private fun askPermissions() {
    rxPermissions
            .request(android.Manifest.permission.GET_ACCOUNTS,
                    android.Manifest.permission.READ_CONTACTS,
                    android.Manifest.permission.WRITE_CONTACTS)
            .subscribe { permissionGranted ->
                isPermissionGranted = permissionGranted
            }
}



override fun showContactList(selectedContacts: ArrayList<Contact>) {
        contactAdapter = ContactListAdapter(selectedContacts, this, context)
        val layoutManager = LinearLayoutManager(this.context)
        contactsRecyclerView?.layoutManager = layoutManager
        contactsRecyclerView?.addItemDecoration(DividerItemDecoration(
                contactsRecyclerView?.context,
                DividerItemDecoration.VERTICAL
        ))
        contactsRecyclerView?.adapter = contactAdapter
    }
我会错过什么呢


谢谢你

看来你应该在这一行之后马上取你的联系人:

isPermissionGranted = permissionGranted

我通过在
onResume()
onViewCreated()
中附加视图解决了这个问题。谢谢大家的帮助

  • 过了很长一段时间后,我发现我正在清除
    onPause()
    上的一次性磁盘,在我的情况下,这应该在
    onDestroy()中完成。我写了这个解决方案,以防对别人有所帮助

检查是否授予权限时调用您的方法

 if (ContextCompat.checkSelfPermission(MainActivity.this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE) == 
                      PackageManager.PERMISSION_GRANTED) {
Filtering filtering=new Filtering();
//contactFetch method  here
    } else {         

     Permission.requestStoragePermission(MainActivity.this,
                    STORAGE_PERMISSION_CODE);
    }
之后,当你请求许可时

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == STORAGE_PERMISSION_CODE)  {
        if (grantResults.length > 0 && grantResults[0] == 
                   PackageManager.PERMISSION_GRANTED) {
            Filtering filtering=new Filtering();
            //Again your fetching method
        } else {
            Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
            Permission.requestStoragePermission(MainActivity.this,
                                  STORAGE_PERMISSION_CODE);
        }
    }
}

试试这个,我不确定,但我认为它会帮助你

它一开始确实存在,但没有成功。我用java对此有一个答案,但问题是你必须在这两个地方调用contactFetching方法。。。。。1.当您检查是否已授予权限时,如果未授予调用该方法以获取权限的权限,并将您的获取方法放在此处,则可能您不了解这一点,因此请再次询问我,然后检查答案。。。。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == STORAGE_PERMISSION_CODE)  {
        if (grantResults.length > 0 && grantResults[0] == 
                   PackageManager.PERMISSION_GRANTED) {
            Filtering filtering=new Filtering();
            //Again your fetching method
        } else {
            Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
            Permission.requestStoragePermission(MainActivity.this,
                                  STORAGE_PERMISSION_CODE);
        }
    }
}