【发布时间】:2017-05-22 20:29:28
【问题描述】:
我从外部数据库(使用改造)检索了许多(6600 行)对象,这些对象看起来和我的 POJO 类一起工作。之后,我尝试将其放入 Realm 对象中,但速度非常慢。我怀疑这个缓慢的动作是因为我开始逐行提交事务。也许有人知道如何在一次提交中将完整的数组列表放入领域对象? 我的主要:
private class AsyncTaskRetro extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
PlacesAPI.Factory.getInstance().getPlaces().enqueue(new Callback<Places>() {
@Override
public void onResponse(Call<Places> call, Response<Places> response) {
for (int i = 0; i < response.body().getPosts().size(); i++) {
RowModel rowModel = new RowModel(response.body().getPosts().get(i).getNazwa(),
Double.parseDouble(response.body().getPosts().get(i).getSzer()),
Double.parseDouble(response.body().getPosts().get(i).getDlug()));
rowModels.add(rowModel);
}
String oldName;
oldName = rowModels.get(0).getName();
shopsNames.add(rowModels.get(0).getName());
mRealm.beginTransaction();
RowModel rowModelRealm = mRealm.createObject(RowModel.class);
mRealm.commitTransaction();
for (int j = 0; j < rowModels.size(); j++) {
mRealm.beginTransaction();
rowModelRealm.setName(rowModels.get(j).getName());
rowModelRealm.setLattitude(rowModels.get(j).getLattitude());
rowModelRealm.setLongitude(rowModels.get(j).getLongitude());
mRealm.commitTransaction();
if (rowModels.get(j).getName().equals(oldName)) {
continue;
}
oldName = rowModels.get(j).getName();
shopsNames.add(rowModels.get(j).getName());
}
//sortowanie
listy z nazwami sklepow
Collections.sort(shopsNames);
adapter = new ShopsAdapter(MainActivity.this, shopsNames);
recyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call<Places> call, Throwable t) {
}
});
return null;
}
}
和 POJO:
public class RowModel extends RealmObject {
@Required
private String name;
@Required
private Double lattitude, longitude;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getLattitude() {
return lattitude;
}
public void setLattitude(Double lattitude) {
this.lattitude = lattitude;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
public RowModel(String name, Double lattitude, Double longitude) {
this.name = name;
this.lattitude = lattitude;
this.longitude = longitude;
}
public RowModel() {
}
}
【问题讨论】:
标签: java android arraylist realm