gpt4 book ai didi

android - 使用 Retrofit 发布时 Realm 对象为空

转载 作者:行者123 更新时间:2023-11-30 02:00:15 26 4
gpt4 key购买 nike

我尝试将 Realm 对象传递给改造 put 方法。尽管没有与其他线程错误不同的线程错误,但不知何故改造正在传递没有来自 Realm 对象的数据的空对象。用户扩展 Realm 对象。

这是改造方法:

    @Headers("Content-Type: application/json") @PUT(USER + "/{id}") Observable<Profile> editUser(@Body User user, @Path("id") String id);

这就是我调用 Activity 的方式:

if (!name.getText().toString().isEmpty()
&& !email.getText().toString().isEmpty()
&& !phone.getText().toString().isEmpty()) {
realm.beginTransaction();
agent.setName(name.getText().toString());
agent.setPhone(phone.getText().toString());
agent.setEmail(email.getText().toString());
realm.commitTransaction();

ConsumerRestAdapter.getService(this)
.editUser(agent, agent.getId())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Profile>() {
@Override public void onCompleted() {
fillValues();
}

@Override public void onError(Throwable e) {
Timber.tag("Profile Editing onError").e(e.getLocalizedMessage());
}

@Override public void onNext(Profile profile) {
realm.beginTransaction();
realm.where(User.class).findAll().clear();
realm.copyToRealm(profile.getUser());
agent = profile.getUser();
realm.commitTransaction();
}
});
}

但是当我查看改造日志时,传递给服务器的对象是空对象。

    {"created_at":0,"has_password":false,"is_admin":false,"updated_at":0}

最佳答案

哦..我忘了我正在拦截 GSON header 。所以这是我的答案。

public RestAdapter normalRestAdapter() {

//let gson ignore realm object
Gson gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
@Override public boolean shouldSkipField(FieldAttributes f) {
return f.getDeclaringClass().equals(RealmObject.class);
}

@Override public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
}).create();

//okhttp to read cookie from server
okHttpClient.setCookieHandler(
new CookieManager(persistentCookieStore, CookiePolicy.ACCEPT_ALL));

RestAdapter restAdapter;

if (BuildConfig.DEBUG) {
restAdapter = new retrofit.RestAdapter.Builder().setEndpoint(BASE_URL)
.setConverter(new GsonConverter(gson))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(okHttpClient))
.setRequestInterceptor(new NNRequestInterceptor())
.setErrorHandler(new RetrofitErrorHandler(mContext))
.build();
} else {
restAdapter = new retrofit.RestAdapter.Builder().setEndpoint(BASE_URL)
.setConverter(new GsonConverter(gson))
.setClient(new OkClient(okHttpClient))
.setErrorHandler(new RetrofitErrorHandler(mContext))
.build();
}

return restAdapter;

解决方案是我创建了新的用户对象并将其传递给改造。

User user = new User();

现在可以使用了。

关于android - 使用 Retrofit 发布时 Realm 对象为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com