我正在尝试在没有Internet连接的情况下缓存一些网络呼叫,以便以后可以重试,
我通过使用Gson.toJson(...)
序列化okhttp3.Request对象来做到这一点
(以及一些其他信息,例如时间戳等)。并且序列化工作正常,并且a已经检查了生成的JSON,并且所有数据都按预期存在。
但是,当我以后想用Gson.FromJson(...)
反序列化json时,会抛出错误:
java.lang.RuntimeException:无法调用公共 okhttp3.RequestBody()没有参数
,我还无法弄清楚该错误的解决方法。
任何帮助将不胜感激。
[编辑] 我的身体构造如下:
FormBody.Builder body = new FormBody.Builder();
body.add({name}, {value});
body.add({name}, {value});
body.build();
答案 0 :(得分:0)
所以我发现反序列化okhttp3.Request对象只是行不通。
相反,我制作了一个简单的结构“ PostBodyHolder”作为请求对象,然后将其缓存,当我实际执行请求时,我从PostBodyHolder构建了okhttp3.Request对象。
public class PostBodyHolder {
/**
* The params of this body.
*/
public final List<Param> params = new ArrayList<>();
/**
* The URL for this body.
*/
public String url;
public PostBodyHolder(String url) {
this.url = url;
}
public PostBodyHolder add(@NonNull String name, @NonNull String value) {
params.add(new Param(name, value));
return this;
}
/**
* Holder for body params.
*/
public class Param {
/**
* The name of the Param
*/
public String name;
/**
* The Value of the Param
*/
public String value;
public Param(@NonNull String name, @NonNull String value) {
this.name = name;
this.value = value;
}
}
}
对这里感兴趣的是Kotlin版本
class PostBodyHolder(
/**
* The URL for this body.
*/
var url: String) {
/**
* The params of this body.
*/
val params: MutableList<Param> = ArrayList()
fun add(name: String, value: String): PostBodyHolder {
params.add(Param(name, value))
return this
}
/**
* Holder for body params.
*/
inner class Param(
/**
* The name of the Param
*/
var name: String,
/**
* The Value of the Param
*/
var value: String)
}