GooglePlacesAutocomplete 在 react-native apk 文件中不起作用 android

GooglePlacesAutocomplete not working in react-native apk file for android

提问人:Eric 提问时间:11/5/2023 更新时间:11/8/2023 访问量:99

问:

我在我的 react native 项目中实现了 Google Places API,我正在尝试使用 查询地点搜索,但对于 android,它仅在使用 expo 进行测试时有效,当我构建测试 apk 并安装在真实设备上时,没有返回结果并且 GooglePlacesAutocomplete 不起作用。我很难跟踪这个错误,因为在开发环境中一切都很完美。拜托,我真的需要帮助。以下是我查询谷歌地点的方式GooglePlacesAutocomplete

 return (
<SafeAreaView style= {{backgroundColor: 'white', height: "100%"}}>
  <View >
  <Text style ={{ color: 'black', 
  fontWeight:'bold', 
  fontSize: 25, 
  padding: 10}}>Lets Move it!</Text>

  <GooglePlacesAutocomplete
  placeholder='Move from?'
  styles={{
    container: {
      flex: 0,
      
    },
    textInput: {
      fontSize: 18,
      backgroundColor: 'white',
      borderWidth: 1,
      padding: 8,
      margin: 8,
      borderColor: '#a29e9e11'

    }
  }}
  onPress={(data, details = null) => {
    dispatch(setOrigin({
      location: details.geometry.location,
      description: data.description
    }))
    dispatch(setDestination(null))
  }}
  fetchDetails ={true}
  enablePoweredByContainer={false}
  
  query={{ key: GOOGLE_MAPS_APIKEY, language: 'en'}}

  nearbyPlacesAPI='GooglePlacesSearch' debounce={400}
   />

  
  </View>
  <View style ={{flex:1}}>
          <BottomView />
  </View>
</SafeAreaView>
)
}
Android React-Native 地图谷歌 地方API

评论

0赞 Anil Ravsaheb Ghodake 11/6/2023
希望您已经为您的项目创建了 API 密钥并为其启用了计费帐户,因为当您的免费限制结束时,它会检查它是否具有计费帐户。
0赞 Anil Ravsaheb Ghodake 11/6/2023
您可以尝试对错误发出警报,以便我们提供更多帮助
0赞 Eric 11/6/2023
使用世博会应用程序进行测试时,一切正常,但是当我在真实设备上构建应用程序并安装时,它不起作用
0赞 Eric 11/6/2023
有没有办法调试apk
0赞 Anil Ravsaheb Ghodake 11/7/2023
尝试实现 renderRow 方法并在其中添加警报。因此,您可能会在发布 apk 的警报中收到错误

答:

0赞 Anil Ravsaheb Ghodake 11/8/2023 #1

你能试试我实现的以下组件吗,它适用于模式调试和发布,(你可以根据你的应用程序样式更改一些样式,并需要处理添加的图像)

return (
    <SafeAreaView style={{flex: 1}}>
      <TouchableOpacity style={{flexDirection: 'row', alignItems: 'center', top : 37,width:40,height:40, paddingLeft : 15, zIndex:10}}
        onPress={()=>{
          navigation.goBack();
        }}>
        <Image
          source={require('../assets/images/backIcon.png')}
          style={{height: 35, width: 35}}
        />

      </TouchableOpacity>

        <GooglePlacesAutocomplete
          placeholder="Enter your search query"
          placeholderTextColor="#8189B0"
          query={{
            key: YOUR_API_KEY,
            language: 'en',
          }}
          textInputProps={{
            ref: textInput => {
              textInput && textInput.focus();
            },
          }}
          returnKeyType={'Search in Google'}
          listViewDisplayed={'auto'}
          fetchDetails={true}
          onPress={(data, details) => {
            console.log('Data=>', JSON.stringify(data));
            console.log('Details=>', JSON.stringify(details));
            navigation.goBack();
          }}
          renderRow={rowData => {
            const title = rowData.structured_formatting.main_text;
            const address = rowData.structured_formatting.secondary_text;
            return (
              <View
                style={{
                  flexDirection: 'row',
                  alignItems: 'center',
                  width: width - 80,
                  paddingBottom: 10,
                  paddingTop: 10,
                }}>
                <Image
                  source={require('../assets/images/Location.png')}
                  style={{width: 35, height: 35}}
                  resizeMode={'contain'}
                />
                <View style={{height: 40, marginLeft: 8}}>
                  <Text
                    style={{color: '#0D1A59', fontSize: 16, paddingRight: 10}}
                    numberOfLines={1}>
                    {title}
                  </Text>
                  <Text style={{fontSize: 12, color: 'rgba(13, 26, 89, 0.65)'}}>
                    {address}
                  </Text>
                </View>
              </View>
            );
          }}
          nearbyPlacesAPI="GoogleReverseGeocoding"
          debounce={300}
          autoFocus={true}
          enablePoweredByContainer={false}
          keyboardShouldPersistTaps="always"
          suppressDefaultStyles={true}
          styles={{
            container: {
              flex: 1,
            },
            textInput: {
              height: 40,
              color: '#2E3E5C',
              width: 300,
              fontSize: 14,
              alignSelf: 'center',
              borderRadius: 8,
              paddingHorizontal: 15,
              marginLeft : 30,
              backgroundColor: '#EFEFEF',
            },

            listView: {
              display: 'flex',
              top: 50,
              width: '93%',
              alignSelf: 'center',
              borderRadius: 8,
              height: height * 0.7,
            },
            row: {
              paddingLeft: 13,
              height: 60,
              flexDirection: 'row',
            },
            poweredContainer: {
              justifyContent: 'flex-end',
              alignItems: 'center',
              borderBottomRightRadius: 5,
              borderBottomLeftRadius: 5,
              borderColor: '#c8c7cc',
              borderTopWidth: 0.5,
            },
          }}
        />
      {/* </View> */}
    </SafeAreaView>
  );

评论

0赞 Eric 11/9/2023
我认为我的 Google API 或其他东西有问题。因为我刚刚复制了您的代码,并且它在测试时可以像我的一样工作,但是当我使用 expo 构建 api 并安装在我的 android 设备上时,当我键入时它不会产生任何结果
0赞 Eric 11/9/2023
我必须限制我的 API 吗?
0赞 Anil Ravsaheb Ghodake 11/10/2023
你说的是哪个 API?
0赞 Eric 11/10/2023
我的意思是我的谷歌api密钥
0赞 Anil Ravsaheb Ghodake 11/13/2023
不,无需限制 API 密钥。但请确保为 Android 平台启用了 API 密钥并与计费帐户连接。