美文网首页
记载两次开发中遇到的Android的BUG

记载两次开发中遇到的Android的BUG

作者: 阿辰xk | 来源:发表于2019-09-30 09:36 被阅读0次

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") } })

这样就没问题了。

两个问题都不是什么大的问题,而是一些小细节,但却浪费了我大半天的时间,记录一下。

相关文章

网友评论

      本文标题:记载两次开发中遇到的Android的BUG

      本文链接:https://www.haomeiwen.com/subject/svdcpctx.html