改造数据持久化
Retrofit data persistence
如何使用 Retrofit 库保存从服务器解析的数据。以便用户在没有网络连接的情况下也可以查看。
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.post_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<ArrayList<Post>> call = apiService.getAllPosts();
call.enqueue(new Callback<ArrayList<Post>>() {
@Override
public void onResponse(Call<ArrayList<Post>> call, Response<ArrayList<Post>> response) {
int statusCode = response.code();
List<Post> posts = response.body();
recyclerView.setAdapter(new PostListAdapter(posts, R.layout.activity_main, getApplicationContext()));
}
@Override
public void onFailure(Call<ArrayList<Post>> call, Throwable t) {
Log.e(TAG, t.toString());
}
});
我想保存响应、持久化并将数据显示到 RecyclerView 中。
帮助保存使用 ORM 将不胜感激,我尝试使用 Sugar ORM 和 ActiveAndroid 但我无法成功:(
当我扩展 SugarRecord 或 Model App 终止时,log cat 上没有任何错误
经过大量研究,我成功地持久化了使用 Retrofit 解析的响应。我已经使用 Realm 来保存数据以供离线使用。我将描述我已经实施的方法,这些方法可能会帮助其他人遇到此类问题。
1.将领域依赖项添加到 Gradle
应用级Gradle文件
`apply plugin: 'realm-android'`
repositories {
maven { url "https://jitpack.io" }
}
classpath "io.realm:realm-gradle-plugin:1.2.0" --> on project level gradle file
2。扩展 RealmObject
public class Post extends RealmObject {
@SerializedName("userId")
@Expose
private Integer userId;
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("title")
@Expose
private String title;
@SerializedName("body")
@Expose
private String body;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
3。如果不存在则创建领域配置
if (realmConfiguration == null) {
realmConfiguration = new RealmConfiguration.Builder(this)
.build();
}
realm = Realm.getInstance(realmConfiguration);
4.保存解析的数据
Call<List<Post>> call = apiService.getAllPosts();
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
closeProgress();
if (response.isSuccessful()) {
List<Post> posts = response.body();
mRecyclerView.setAdapter(new PostAdapter(posts, R.layout.activity_main, getApplicationContext()));
for (int i = 0; i < posts.size(); i++) {
realm.beginTransaction();
Post post = realm.createObject(Post.class);
post.setUserId(posts.get(i).getUserId());
post.setId(posts.get(i).getId());
post.setTitle(posts.get(i).getTitle());
post.setBody(posts.get(i).getBody());
realm.commitTransaction();
}
mRecyclerView.setVisibility(View.VISIBLE);
}
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
t.printStackTrace();
}
});
5.查询和 Inflate 由 Realm
保存的数据
RealmResults<Post> posts = realm.where(Post.class).findAll();
mRecyclerView.setAdapter(new PostAdapter(posts, R.layout.activity_main, getApplicationContext()));
}
按照以上方法解决了我的问题,希望对您的问题也有帮助。如果您在实施解决方案时遇到任何问题,可以在评论
中询问我
如何使用 Retrofit 库保存从服务器解析的数据。以便用户在没有网络连接的情况下也可以查看。
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.post_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ApiInterface apiService =
ApiClient.getClient().create(ApiInterface.class);
Call<ArrayList<Post>> call = apiService.getAllPosts();
call.enqueue(new Callback<ArrayList<Post>>() {
@Override
public void onResponse(Call<ArrayList<Post>> call, Response<ArrayList<Post>> response) {
int statusCode = response.code();
List<Post> posts = response.body();
recyclerView.setAdapter(new PostListAdapter(posts, R.layout.activity_main, getApplicationContext()));
}
@Override
public void onFailure(Call<ArrayList<Post>> call, Throwable t) {
Log.e(TAG, t.toString());
}
});
我想保存响应、持久化并将数据显示到 RecyclerView 中。 帮助保存使用 ORM 将不胜感激,我尝试使用 Sugar ORM 和 ActiveAndroid 但我无法成功:(
当我扩展 SugarRecord 或 Model App 终止时,log cat 上没有任何错误
经过大量研究,我成功地持久化了使用 Retrofit 解析的响应。我已经使用 Realm 来保存数据以供离线使用。我将描述我已经实施的方法,这些方法可能会帮助其他人遇到此类问题。
1.将领域依赖项添加到 Gradle
应用级Gradle文件
`apply plugin: 'realm-android'`
repositories {
maven { url "https://jitpack.io" }
}
classpath "io.realm:realm-gradle-plugin:1.2.0" --> on project level gradle file
2。扩展 RealmObject
public class Post extends RealmObject {
@SerializedName("userId")
@Expose
private Integer userId;
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("title")
@Expose
private String title;
@SerializedName("body")
@Expose
private String body;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
3。如果不存在则创建领域配置
if (realmConfiguration == null) {
realmConfiguration = new RealmConfiguration.Builder(this)
.build();
}
realm = Realm.getInstance(realmConfiguration);
4.保存解析的数据
Call<List<Post>> call = apiService.getAllPosts();
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
closeProgress();
if (response.isSuccessful()) {
List<Post> posts = response.body();
mRecyclerView.setAdapter(new PostAdapter(posts, R.layout.activity_main, getApplicationContext()));
for (int i = 0; i < posts.size(); i++) {
realm.beginTransaction();
Post post = realm.createObject(Post.class);
post.setUserId(posts.get(i).getUserId());
post.setId(posts.get(i).getId());
post.setTitle(posts.get(i).getTitle());
post.setBody(posts.get(i).getBody());
realm.commitTransaction();
}
mRecyclerView.setVisibility(View.VISIBLE);
}
}
@Override
public void onFailure(Call<List<Post>> call, Throwable t) {
t.printStackTrace();
}
});
5.查询和 Inflate 由 Realm
保存的数据RealmResults<Post> posts = realm.where(Post.class).findAll();
mRecyclerView.setAdapter(new PostAdapter(posts, R.layout.activity_main, getApplicationContext()));
}
按照以上方法解决了我的问题,希望对您的问题也有帮助。如果您在实施解决方案时遇到任何问题,可以在评论
中询问我