未定义不是对象(评估'_reactNativeContacts.default.getAll')

时间:2019-04-24 10:23:44

标签: android react-native hyperlink expo react-native-contacts

我正在尝试使用Expo制作的react-native应用程序使用react-native-contacts,但是我收到此错误消息:

undefined is not an object (evaluating '_reactNativeContacts.default.getAll')

这是我使用的代码:

import React from 'react';
import {
  Image,
  Platform,
  ScrollView,
  StyleSheet,
  Text,
  TouchableOpacity,
  View,
  Modal,
  TouchableHighlight,
  ImageBackground,
  TextInput,
  Picker,
  PermissionsAndroid
} from 'react-native';
import { WebBrowser } from 'expo';
import Contacts from 'react-native-contacts';

import { MonoText } from '../components/StyledText'; 


  Contacts.getAll((err, contacts) => {
    if (err === 'denied'){
      // error
    } else {
      // contacts returned in Array
    }
  })

在此页面上,我尝试按照他的所有步骤进行android部分的安装: https://github.com/rt2zz/react-native-contacts#getting-started

但是我找不到在哪里可以做这部分: 我不知道在哪里可以找到这个文件:android / settings.gradle

通过我在应用目录中尝试此命令“ react-native link”的方式,没有任何改变。

Android
In android/settings.gradle
...
include ':react-native-contacts'
project(':react-native-contacts').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-contacts/android')
In android/app/build.gradle
...
dependencies {
    ...
    implementation project(':react-native-contacts')
}

有人遇到过这种问题吗? 感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

据我了解,您正在使用Expo开发应用程序。一些独立的库无法与Expo一起使用。我有两个建议给你。

  1. 如果您想继续使用react-native-contacts,则需要从Expo退出应用程序
  2. 或直接使用Expo的通讯录api,您可以在此链接Expo's Contacts中找到详细信息,我会这样做,这对您来说解决问题并减少工作量

    import { Contacts } from 'expo';
    
    const { data } = await Contacts.getContactsAsync({
        fields: [Contacts.Fields.Emails],
    });
    
    if (data.length > 0) {
        const contact = data[0];
        console.log(contact);
    }
    

您可以在react-native-contacts github page中找到相同的问题。 Issue

答案 1 :(得分:0)

2021 年 7 月更新

Contacts 模块已从核心 expo 包移至 expo-contacts(请参阅 documentation)。

示例:

import * as Contacts from 'expo-contacts';

const { status } = await Contacts.requestPermissionsAsync();

if (status === 'granted') {
  const { data: contacts } = await Contacts.getContactsAsync();

  console.log('Retrieved contacts!', contacts);
}