1.上传图片失败
项目中有要上传图片的地方,在网上找了一下,很快找到了对应的代码
val multipartBody = MultipartBody.Builder().setType(MultipartBody.FORM)
val requestBody = file.asRequestBody("multipart/form-data".toMediaTypeOrNull())
multipartBody.addFormDataPart("file", file.name, requestBody)
addDisposable( httpApi.uploadImage(multipartBody.build()) .compose(RxUtils.ioToMainFlowableScheduler()) .compose(RxUtils.handleHttpData()) .subscribe({ uploadImgResult: UploadImgResult -> LogUtils.logI(uploadImgResult.fileUrl) }, { throwable: Throwable -> getIView()?.run { showToast(throwable.message) logI(throwable.message) } }))
接口如下:
@Multipart
@POST("v1/file/normalUpload")
fun uploadImage(@Part("file") file: RequestBody): Flowable<HttpData<UploadImgResult>>
但是在实际使用的时候发现一直上传失败,后来我把接口改成:
@POST("v1/file/normalUpload")
fun uploadImage(@Body file: RequestBody): Flowable>
就成功了,搞了半天是注解的问题。
2.调用WebView的方法失败
常用webView的都知道,用evaluateJavascript方法可以调用前端的代码方法,由于我是用kotlin开发的,所以我传递参数的时候就直接写了:
webView.evaluateJavascript("returnMapData($longitude, $latitude , $addressName , $cbName)",
object : ValueCallback<String> { override fun onReceiveValue(value: String) { LogUtils.logI("onReceiveValue:$value") } })
结果失败,前端的方法不能调用到,后来研究了一下,我发现参数有数字,有字符串,于是我在字符串参数两边加上了单引号:
"returnMapData($longitude, $latitude , '$addressName' , '$cbName')"
可是还是失败。后来折腾了几个小时,才发现不能用kotlin的写法来调用,必须写成字符串的拼装:
webView.evaluateJavascript( "returnMapData(" + longitude + "," + latitude + ",'" + addressName + "','" + cbName + "')",
object : ValueCallback<String> { override fun onReceiveValue(value: String) { LogUtils.logI("onReceiveValue:$value") } })
这样就没问题了。
两个问题都不是什么大的问题,而是一些小细节,但却浪费了我大半天的时间,记录一下。
网友评论