我在安卓应用中使用SQLite数据库,希望能监听任何数据库变化。我该怎么做?
感谢您未来的所有帮助!
我在安卓应用中使用SQLite数据库,希望能监听任何数据库变化。我该怎么做?
感谢您未来的所有帮助!
SQLite并不提供任何更改监听器功能,您需要自行监视。最简单的方法是在每次修改数据库时发送广播(或者更好的是本地广播)。一些数据库库已经提供了类似此功能的功能-请查看GreenDAO。
你好,我想在使用 Firebase 时提出一个新的建议。你可以为用户消息创建一个新的 JSON 节点,并使用 On Data Change 来检测未读消息的数量,然后在 onDatachange 中更新你的 UI。这个建议是否明智,或者偏离了主要思路?
假设您在Android应用程序中有一个处理查询的类,我们需要使数据库方法成为可观察对象。同时,我们需要一些监听器来观察上述可观察对象。让我们将数据库处理程序设置为可观察对象
:
让我们创建可观察接口:
public interface DatabaseObservable {
//register the observer with this method
void registerDbObserver(DatabaseObserver databaseObserver);
//unregister the observer with this method
void removeDbObserver(DatabaseObserver databaseObserver);
//call this method upon database change
void notifyDbChanged();
}
现在在你的数据库类中实现
可观察者
public class LocalStorageDb extends SQLiteOpenHelper implements DatabaseObservable {
LocalStorageDb lDb;
//make it Singleton
public static synchronized LocalStorageDB getInstance(Context context) {
if (mlLocalQuickChatDB == null) {
mlLocalQuickChatDB = new LocalStorageDB(context.getApplicationContext());
}
return mlLocalQuickChatDB;
}
//there are some methods to do some queries
public void createContact(Foo foo, Bar bar){
//some queries here
//call the Observable Method to let know the observers that it has changed
onDatabaseChanged();
}
//now override the DatabaseObservable method which is responsible to notify the listeners
@Override
public void onDatabaseChanged() {
for (DatabaseObserver databaseObserver:observerArrayList){
if (databaseObserver!= null){
databaseObserver.onDatabaseChanged();
}}
}
//also you need functions to **register** or **unregister** the observers:
@Override
public void registerDbObserver(DatabaseObserver databaseObserver) {
if (!observerArrayList.contains(databaseObserver)){
observerArrayList.add(databaseObserver);
}
@Override
public void removeDbObserver(DatabaseObserver databaseObserver) {
observerArrayList.remove(databaseObserver);
}
然后我们需要一个 观察者
来 观察 这些变化:
public interface DatabaseObserver {
void onDatabaseChanged();
}
现在在您的活动或片段中,有一个获取更改的函数,例如getLocalContact
。在片段上实现观察者,例如:
public class ExampleFragment extends Fragment implements DatabaseObserver {
LocalStorageDB localStorageDB;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
localStorageDB = LocalStorageDB.getInstance();
}
@Override
public void onPause() {
super.onPause();
localStorageDB.removeObserver(this);
}
@Override
public void onResume() {
localStorageDB.registerObserver(this);
super.onResume();
}
public ExampleFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_example, container, false);
}
@Override
public void onDatabaseChanged() {
getLocalContact();
}
private void getLocalContact(){
//function to fetch contacts from database
}
}