RN项目实战中常见问题

目录
一、Could not get BatchedBridge, make sure your bundle is packaged correctly com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
二、openPicker or openCamera
如果您以 Android 10(API 级别 29)或更高版本为目标平台,请在应用的清单文件中将 requestLegacyExternalStorage 的值设置为 true
三、打开高德地图和百度地图导航
四、安卓TextInput多行文本输入时不靠顶
五、保存图片到手机相册

一、 Could not get BatchedBridge, make sure your bundle is packaged correctly com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)

解决办法注释以下代码:

if (useIntlJsc) {
        implementation 'org.webkit:android-jsc-intl:+'
} else {
        implementation 'org.webkit:android-jsc:+'
}

二、openPicker or openCamera

如果您以 Android 10(API 级别 29)或更高版本为目标平台,请在应用的清单文件中将 requestLegacyExternalStorage 的值设置为 true

 <manifest ... >
      <!-- This attribute is "false" by default on apps targeting
           Android 10 or higher. -->
        <application android:requestLegacyExternalStorage="true" ... >
          ...
        </application>
    </manifest>

三、打开高德地图和百度地图导航

import React, { Component } from 'react';
import { TouchableOpacity, TouchableHighlight,Linking,StyleSheet, View, Image, Text, Modal,Platform } from 'react-native';
import { connect } from 'react-redux';
import { screenW, screenH } from '../util/ScreenUtil';
import { gcj02towgs84 ,wgs84togcj02} from '../util/YFLocation';
import YFCurLocationView from   '../util/YFCurLocationView';
import { actionAccount } from '../redux/action';
import Toast, { DURATION } from 'react-native-easy-toast';

class EventMapNavigation extends Component {
    constructor(props) {
      super(props);
  
      this.state = {
        spinkitVisible: false,
        spinkitSize: 100,
        spinkitType: 'FadingCircleAlt',
        spinkitColor: '#2C96F6',
      } 
    }
    componentDidMount() {
        this.setState({
            statusBarHeight: this.props.account.statusBarHeight
        })
    }
 
    gaodeNav=()=>{
      var curPosition = this.props.route.params?.curPosition;
      var lat=0;
      var lon=0;
      if(curPosition!=null){
        let array=curPosition.split(',');
      if(array.length>1){
           lat=parseFloat(array[1]);
          lon=parseFloat(array[0]);
          }
        }
     
      var url="";
      let  webUrl=`http://uri.amap.com/navigation?to=${lon},${lat},${'数字孪生'}&mode=bus&coordinate=gaode`;
        if(Platform.OS=='iOS'){
           url="iosamap://navi?sourceApplication=数字孪生&lat="+lat+"&lon="+lon+"&dev=0";
        }else{
            url="androidamap://navi?sourceApplication=数字孪生&lat="+lat+"&lon="+lon+"&dev=0";
         }
            Linking.canOpenURL(url).then(supported => {
                if (!supported) { 
                   return Linking.openURL(webUrl).catch(e => console.warn(e));
                } else {
                    return Linking.openURL(url).catch(e => console.warn(e));
                }
            }).catch(err => {
                this.refs.toast.show(err.message);
            } );
    }
   
    baiduNav=()=>{
        var   curPosition = this.props.route.params?.curPosition;
        var address=this.props.route.params?.address;
        var lat=0;
        var lon=0;
        if(curPosition!=null){
          let array=curPosition.split(',');
          if(array.length>1){
            lat=parseFloat(array[1]);
            lon=parseFloat(array[0]);
          }
         }
 
              let    url=`baidumap://map/direction?origin={{我的位置}}&destination=latlng:${lat},${lon}|name:${address}&mode=driving&coord_type=gcj02`;
              let    webUrl=`http://api.map.baidu.com/direction?destination=latlng:${lat},${lon}|name=${address}&mode=transit&coord_type=gcj02&output=html&src=mybaoxiu|wxy`;
         
              Linking.canOpenURL(url).then(supported => {
                  if (!supported) { 
                      return Linking.openURL(webUrl).catch(e => console.warn(e));
                  } else {
                      return Linking.openURL(url).catch(e => console.warn(e));
                  }
              }).catch(err => {
                  this.refs.toast.show(err.message);
              } );
    }
  
  
    render() {
      return (
        <View style={{ width: screenW, flex: 1, }}>
          <View style={{ backgroundColor: '#2c96f6', width: screenW, height: Platform.OS == 'android' ? 0 : this.state.statusBarHeight }}></View>
        <View style={{ backgroundColor: "#2c96f6", height: 44, flexDirection: 'row', alignItems: 'center' }}>
          <TouchableOpacity activeOpacity={0.9} style={{ flexDirection: 'row', alignItems: 'center' }} onPress={() => this.props.navigation.goBack()}>
            <Image source={require('../images/device/back-icon.png')} style={{ marginLeft: 7, width: 28, height: 28 }} />
          </TouchableOpacity>
        
            <View style={{ width: screenW - 72, height: 30, flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }}>
              <Text style={{ color: '#ffffff', fontSize: 18 }}>导航</Text>
            </View>
           
        </View>

        <YFCurLocationView style={{ width: screenW ,flex:1 }}  curPosition={this.props.route.params?.curPosition}  onClick={(map)=>{  }}   /> 
          
       <View style={{height:45,width:screenW,backgroundColor:'#ffffff',flexDirection:'row', justifyContent:'space-between',alignItems:'center'}}>
       <TouchableOpacity activeOpacity={0.9}   onPress={()=> this.gaodeNav()}>
        <View style={{width:screenW/2.0,flexDirection:'row', justifyContent:'center',alignItems:'center'}}><Text>高德地图</Text></View>
        </TouchableOpacity>
        <TouchableOpacity activeOpacity={0.9}   onPress={ ()=> this.baiduNav()}>
        <View style={{width:screenW/2.0,flexDirection:'row', justifyContent:'center',alignItems:'center'}}><Text>百度地图</Text></View>
        </TouchableOpacity>
       </View>
       
       <Toast ref="toast" position='center' opacity={.8} />
        </View>
      );
    }
  }
  
  const styles = StyleSheet.create({
    container: {
      backgroundColor: 'white',
      width: screenW,
      flex: 1
    },
  })
 
  const stateToProps = (state) => {
    return {
      account: state.account
    }
  }
  
  const dispatchToProps = (dispatch) => {
    return {
        loginChange() {
            let action = actionAccount('false', '', '', {}, '',0)
            dispatch(action)
        }
    }
  }
  export default connect(stateToProps, dispatchToProps)(EventMapNavigation);

四、安卓TextInput多行文本输入时不靠顶

TextInput.jpg
<TextInput multiline={true} textAlignVertical="top"  
 style={{ width: screenW - 30, marginTop: 10, fontSize: 10, color: '#646464', height: 125, borderColor: '#e6e6e6', borderRadius: 5, borderWidth: 1, borderStyle: 'solid' }}
 placeholderTextColor={'#c8c8c8'} 
onChangeText={(text) => { this.setState({ description: text }); }} 
value={this.state.description} placeholder='请输入备注内容' />

五、保存图片到手机相册

  saveImg=()=>{
      let uri = this.state.userImgUrl;
      let ref=this.refs;
      if (Platform.OS == 'ios') {
          let promise = CameraRoll.save(uri);
          promise.then((result) => {
            ref.toast.show("图片保存成功");
          }).catch((error) => {
              ref.toast.show("图片保存失败");
          });
      } else {
          const storeLocation = `${RNFS.DocumentDirectoryPath}`;
          let pathName = new Date().getTime() + "image.png"
          let downloadDest = `${storeLocation}/${pathName}`;
          const ret = RNFS.downloadFile({ fromUrl: uri, toFile: downloadDest });
          ret.promise.then(res => {
              if (res && res.statusCode === 200) {
                  var promise = CameraRoll.save("file://" + downloadDest);
                  promise.then((result) => {
                    ref.toast.show("图片保存成功");
                  }).catch((error) => {
                    ref.toast.show("图片保存失败");
                  });
              }
          })
      }
  }
关注公众号,查看更多内容.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271