RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

小程序开发相关产品技术讨论,包括面板、智能小程序、React Native、Ray跨端框架、Panel SDK、微信小程序、小程序开发工具(IDE)及其他开发技术相关等话题


Post Reply
feige2023
Posts: 34

虚拟设备ID:vdevo175248670529913
相关DP点:DP122,DP123
代码如下:

Code: Select all

_renderBacklightOptView = () => {

const {backlightVal}=this.state;
// 需要将数据转成字节序,
console.log("getBacklightVal:",backlightVal)
let byteArray = this._hexToBytes(backlightVal);
console.log('get blackLightVal:',byteArray);
let intBacklightVal =byteArray[0];
intBacklightVal = intBacklightVal<0?0:intBacklightVal;
intBacklightVal = intBacklightVal>30?30:intBacklightVal;
const heightLine =cx(140);
return(
<View style={{width:'100%',height:heightLine,paddingLeft:cx(10),paddingRight:cx(10)}}>
<TYText style={[styles.sensitivityTextStyle, { color:'#92959F',marginBottom:cx(10)}]}>
{Strings.getLang('setting_title_backlight_opt')}
</TYText>

<View style={{display:'flex',flexDirection:'row',alignItems:'center',justifyContent:'center',marginTop:cx(6),width:'100%',height:cx(15)}}>
<Text style={{fontSize:14,color:'#828282',marginRight:cx(10)}}>{intBacklightVal}%</Text>
</View>

<View style={{display:'flex',flexDirection:'row',width:'100%',height:cx(40),alignItems:'center',justifyContent:'center'}}>
<Image source={res.base_sun0} style={{width:cx(20),height:cx(20),marginRight:cx(10)}}></Image>
<Slider.Horizontal
value={intBacklightVal}
onValueChange={(value)=>{
// 考虑到前期rgb数据始终为0xff,
this._updateBacklightValue(value);
}}
onSlidingComplete={(value)=>{
const updateValue = this._updateBacklightValue(value);
this.props.updateDp({
[Config.dpCodes.backlightVal]:updateValue
})
}}
style={{width:'80%',height:cx(40)}}
minimumValue={0}
maximumValue={30}
stepValue={1}
minimumTrackTintColor={ActiveThemeColor}
thumbTintColor={ActiveThemeColor}
thumbStyle={{borderWidth:6,backgroundColor:'white',borderColor:ActiveThemeColor}}
></Slider.Horizontal>
<Image source={res.base_sun1} style={{width:cx(20),height:cx(20),marginLeft:cx(10)}}></Image>
</View>


</View>
)
}

相关的数值转换函数如下:

Code: Select all

// 将hex字符串转成字节数组
_hexToBytes=(hex)=>{
const bytes=[];
for(let i=0;i<hex.length;i+=2){
bytes.push(parseInt(hex.substr(i,2),16));
}
return bytes;
}
// 将字节数组转成HEX字符串
_byteToHexString=(bytes)=>{
let hexString = "";
for(let i=0;i<bytes.length;i++){
hexString+= bytes[i].toString(16).padStart(2,"0");
}
return hexString;
}
// 更新state的数据
_updateBacklightValue=(data)=>{
const datas = [Math.round(data),0xff,0xff,0xff]
const updateValue = this._byteToHexString(datas)
console.log("需要更新的backlightVal:",updateValue);
this.setState({
backlightVal:updateValue
})
return updateValue;
}

Tags:
feige2023
Posts: 34

Re: RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

面板上传到后台后,可通过base64编码,在设备调试界面发送,如"Hf///w=="上报改变面板中Slider和Text的值。就是无法通过面板下发RAW的数据,拖动Slider也无法改变Text的值。

crisiron
Posts: 185

Re: RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

几个思路排查:

  1. slider 值不使用raw格式,直接使用 value格式,简化处理逻辑;
  2. 进行日志打印,将日志数据保存到 storage 中,增加一个按钮,点击按钮后查看日志是否跟预期一致;
feige2023
Posts: 34

Re: RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

我们面板中有一个Slider调节亮度是使用Value格式,是OK的,因项目要求,需要用到RAW格式喔。

crisiron
Posts: 185

Re: RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

那就使用 思路2吧, 这种涉及具体业务的需要你们那边自行进行排查了

feige2023
Posts: 34

Re: RN 面板在调试的时候,通过Slider下发RAW数据正常,但上传到后台,真机和虚拟设备无法下发

大佬,我临时用一个ScrollView组件将日志通过Text显示后,线上的能正常操作,下发也正常。然后我再注释掉ScrollView日志组件后,重新打包更新到后台后,Slider下发的RAW也正常了。。。。我。。。。无法理解为啥突然又正常了

Post Reply