【发布时间】:2014-08-01 05:11:27
【问题描述】:
我正在尝试向我的 SQLite 数据库添加一个 RX 观察者,但我的实现肯定会遗漏一些东西,因为我的观察者的 onNext() 和 onCompleted() 方法都没有被调用。
这是我的观察员:
private final Observer<List<Order>> mObjectiveObserver = new Observer<List<Order>>() {
@Override
public void onCompleted() {
System.out.println("Load completed");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<Order> objectives) {
System.out.println("On Next: " + objectives.size() + " elements found!");
orderAdapter.clear();
if (objectives != null) {
orderAdapter.addAll(objectives);
mCirclePulseView.setVisibility(View.INVISIBLE);
} else {
mCirclePulseView.setVisibility(View.VISIBLE);
}
orderAdapter.notifyDataSetChanged();
}
};
这些是我的LoaderCallback 方法:
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
Loader<Cursor> loader = null;
switch (loaderId) {
case LOADER_ORDERS:
System.out.println("Create loader called");
loader = new CursorLoader(OrderManagerApplication.getAppContext(), OrderManagerContract.Order.CONTENT_URI,
QueryOrder.PROJECTION_SIMPLE, null, null, OrderManagerContract.Order.DATE_SORT);
break;
}
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (getActivity() == null) {
return;
}
if (data != null && !data.isClosed()) {
System.out.println("Finished loading orders, data not null");
switch (loader.getId()) {
case LOADER_ORDERS:
if (subscription != null && !subscription.isUnsubscribed()) {
subscription.unsubscribe();
}
subscription = AndroidObservable
.bindFragment(this, DatabaseHelper.mainOrdersObservable(data))
.subscribeOn(Schedulers.computation())
.unsubscribeOn(AndroidSchedulers.mainThread())
.subscribe(mObjectiveObserver);
System.out.println("I should be here, onLoadFinished");
break;
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
内容观察者代码如下:
class HomeOrdersContentObserver extends ContentObserver {
private int mLoaderId = 0;
public HomeOrdersContentObserver(Handler handler, int loaderId) {
super(handler);
mLoaderId = loaderId;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
if (getActivity() == null) {
return;
}
Bundle bundle = new Bundle();
//bundle.putString(FILTER_TXT, lastFilterQ);
restartLoader(mLoaderId, bundle);
}
}
public void restartLoader(int loaderId, Bundle args) {
getLoaderManager().restartLoader(loaderId, args, this);
}
我在代码中的任何地方都放置了日志,它们会按应有的方式打印出来,除了 onNext 和 onCompleted 方法。我的实施中可能缺少什么想法?
【问题讨论】:
-
请从您的代码中删除不必要的行,并为 DatabaseHelper.mainOrdersObservable(data) 添加您的实现。您应该发布最小的可重现示例。
标签: java android sqlite contentobserver rx-java