美文网首页
Retorfit2采坑记

Retorfit2采坑记

作者: 九风特 | 来源:发表于2020-09-22 16:52 被阅读0次

    Retrofit2本身并不是一个很复杂的第三方库(至少从使用上是如此的)。那么像我一样知道点nodejs,又想学学Retrofit2的人来说,为了各种尝试,很可能自己搭建个restapi的服务器,然后在AS上实验Retrofit2。下面是我的采坑记录

    无法访问localhost或者127.0.0.1
    这是因为我们的安卓虚拟机给占用了,要用映射访问 把localhost改成10.0.2.2即可, 如:.baseUrl("http://10.0.2.2:3412/")

    post的json body总是为空
    这个纯属自己对notejs只是了解一丢丢,对http又不愿意详细了解导致的。我想传一个json格式的body给服务器解析,但服务器实际想要的不是json格式,而是类似(a1=1&a2=2)这样的,对于我的情况,修改测试服务器一行代码即可:

    app.use(bodyParser.urlencoded({ extended: true }));
    

    改成

    app.use(bodyParser.json({ extended: true }));
    

    如果用非json格式的body就要自己拼写,Retrofit2似乎没有提供这种参数的自动转换,不过也很好转换,比如我们的bean类是

    data class Quote(val author:String, val text:String )
    

    加一个导出函数就行了

    data class Quote(val author:String, val text:String )
    {
        fun getRequestBody():RequestBody
        {
            return RequestBody.create(
                MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"),
                "author=$author&text=$text"
            )
        }
    }
    
        @POST("quote")
        fun addQuote(@Body body:RequestBody):Call<ResponseBody>
      
        fun addQuote(quote:Quote){
                httpCaller.addQuote(quote.getRequestBody()).enqueue(object : Callback<ResponseBody?> {
                    override fun onResponse(
                        call: Call<ResponseBody?>,
                        response: Response<ResponseBody?>
                    ) {
                        Log.d("zrm", response.body().toString())
                    }
    
                    override fun onFailure(call: Call<ResponseBody?>, t: Throwable) {
                        Log.e("zrm", t.message)
                    }
                })
            }
    

    相关文章

      网友评论

          本文标题:Retorfit2采坑记

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