,因为我使用的领域,我需要我要访问数据库
错误每次打开一个境界连接,你只需要为给定的线程1个打开实例,以访问数据库。
保持这种连接在活动开放“似乎没有必要”,因为你可能需要进行查询的适配器
在这种情况下,你可以有活性级领域实例为“范围依赖“,你可以通过getSystemService()
通过上下文分享,如果这是你喜欢做的事情。
public class MyActivity extends Activity {
Realm realm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
//...
}
@Override
public void onDestroy() {
if(realm != null) {
realm.close();
}
super.onDestroy();
}
...
@Override
public Object getSystemService(String key) {
if("REALM".equals(key)) {
return realm;
}
return super.getSystemService(key);
}
}
public class MyAdapter extends RecyclerView.Adapter<MyModelViewHolder> {
private final Context context;
Realm realm;
RealmResults<MyModel> results;
private final RealmChangeListener listener = new RealmChangeListener() {
@Override
public void onChange(Object element) {
notifyDataSetChanged();
}
}
public MyAdapter(Context context) {
this.context = context;
//noinspection ResourceType
realm = (Realm)context.getSystemService("REALM");
results = realm.where(MyModel.class).findAll();
results.addChangeListener(listener);
}
...
}
因此具有反正打开适配器内的境界的连接。
错误
有一些更高的原因,事先获取的数据集或这仅仅是一个喜好的事?
这是因为你的适配器只是用来描述如何显示数据集的元素,而成为一个也决定它必须显示的数据的上帝。
尽管公平,但实际上难以从外部管理数据集;东西必须反正持有强烈的参考结果集。所以,当我不真正打扰单元测试性时,我确实在Adapter内部获得了结果。它确实有效。
这只是一个偏好问题,但IMO混合提取数据并显示它们似乎将它们耦合得比我在大多数情况下更喜欢的高。 –