下面问题主要针对安卓端
async-storage
包后,再装新的包编译时node.js弹出warn没有被link之类的warn Package @react-native-community/async-storage ...
我发现的最好用的办法,就是出现这样的情况,把async-storage
包删了重装一下。
What went wrong:
Execution failed for task ':app:processDebugResources'.
Could not read path ...
遇到这种问题,先检查自己的运行环境,最常见的就是没有adb reverse tcp:8081 tcp:8081
error: failed to read PNG signature: file does not start with PNG signature.
D:\reactnative\MovieTime\android\app\src\main\res\drawable-xxxhdpi\launch_screen.png: error: file failed to compile.
这种情况一般出现在使用启动屏的时候,将png
格式的启动屏换成jpg
格式
某些输入文件使用了未经检查或不安全的操作。 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
解决方法:
在android/build.gradle
中加入以下代码
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
}
Execution failed for task ':app:processReleaseResources'.Could not read path ...
在debug和release版本切换中可能会造成一些gradle缓存出错
解决:
使用Android Studio:
clean project:Build --> Clean Project
invalidate caches :File -> Invalidate Caches/Restart
重新加载gradle
一般都是电脑开热点手机连接,手机开热点电脑连接也是一样的,将服务器的ip地址设置成热点的子网就ok了。
在android/app/main/AndroidManifest.xml
中加入以下代码加入允许http
访问权限
<manifest>
...
<application
....
android:usesCleartextTraffic="true" //+++++++++++++++++++
</application>
</manifest>
axios
用post提交的数据,后端接收错误axios
的post格式问题,axios
原格式为application/json
,传递json
字符串:{"name":"123","password":"123"}
而我需要传递application/x-www-form-urlencoded
格式,类似 key-value
的格式
解决方案:
let formData = new FormData()
// 数据通过append写入formdata
formData.append('name',this.state.name)
formData.append('password',this.state.password)
axios({method: 'post',
url: 'http://192.168.43.62:9999/login/',
data: formData,
}).then(response =>{
...
})
axios({method: 'post',
url: 'http://192.168.43.62:9999/login/',
data:{
name: name,
password: password
},
// 增加transformRequest方法在发送post数据之前改变数据格式
transformRequest: [function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}],
}).then(response =>{
...
})
如果想传递一个对象,记得先转化为字符串!!
let obj = {
name: this.state.name,
password: this.state.password,
username: '新用户'
}
obj = JSON.stringify(obj)
axios({method: 'post',
url: 'http://192.168.43.62:9999/createUser/',
data:{obj: obj},
transformRequest: [function (data) {
let ret = ''
for (let it in data) {
ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
}
return ret
}]
})
.then(response =>{
...
}
由于this指针的指向随时会改变,如果在函数中使用匿名函数的方式去获取this
指针获取到的.then中的this
以前我们解决这样的问题都是使用var that = this
来解决
现在如果使用箭头函数获取的就是当前页面的this