首先将要上传的数据转换成为Json数据,可以用Gson直接转换或者用JSONObject类,将HashMap数据转换为Json,这里使用后面一种方式来实现,代码如下:
// 将数据封装为map类型
val params = HashMap<String, String>()
params["message"] = feedbackContent
params["from"] = feedbackContact
params["ghversion"] = BuildConfig.VERSION_NAME
params["channel"] = ""
params["type"] = android.os.Build.MODEL
params["sdk"] = android.os.Build.VERSION.SDK_INT.toString()
params["version"] = android.os.Build.VERSION.RELEASE
//将Map转换为JSONObject
val jsonObject = JSONObject(params)
// 最后将JsonObject转换为字符串,封装为Retrofit的RequestBody,
val body = RequestBody.create(MediaType.parse("application/json"),jsonObject.toString())
定义一个Retrofit上传到服务器的POST接口方法:
/**
* 上传文本型数据
*/
@Headers("Content-Type: application/json", "Accept: application/json")
@POST("suggestions")
fun postFeedback(@Body body: RequestBody) : Single<ResponseBody>
最后在ViewModel中用Retrofit调用这个这个方法即可.
mApiService.postFeedback(body)
.subscribeOn(Schedulers.io())
.subscribe({
feedbackLiveDate.setValue(true)
}, {
errorLiveData.postValue("提交反馈失败 ${it.message}")
})
}