我为我的应用启动了一个ProgressDialog,说“正在连接”。因此,添加我的Firebase数据库的监听器和onDataChange方法我想改变我的ProgressDialog的文本,例如“我已经连接,现在我正在下载数据”。稍后循环遍历数据库中的可迭代结果并隐藏ProgressDialog。
我的问题是ProgressDialog显示但我无法更新或更改消息。什么都没有。
我正在尝试使用RunOnUIThread,但没有任何效果。
你能帮助我达到我的目标,还是告诉我我无法做到的事情。
DialogHandler.showLoadingDialog(InitActivity.this, R.string.connecting,
"Connecting", true, false);
FDatabaseManager.getInstance().addListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
MyObject obj;
InitActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
DialogHandler.updateLoadingDialog(R.string.downloading, "¡Ready! We're downloading data. Please wait.");
}
});
for (DataSnapshot i : dataSnapshot.getChildren()) {
obj= i.getValue(MyObject.class);
if (SQLiteManager.getInstance(InitActivity.this).existOn(SQLiteContract.TABLE_OBJS, obj.getId())) {
ContentValues values = new ContentValues();
values.put(SQLiteContract.ObjColumns.FIELD_LATITUDE, obj.getCoordinates().getLatitude());
values.put(SQLiteContract.ObjColumns.FIELD_LONGITUDE, obj.getCoordinates().getLongitude());
SQLiteManager.getInstance(InitActivity.this).insert(SQLiteContract.TABLE_OBJ, values);
}
}
DialogHandler.dismissLoadingDialog();
}
@Override
public void onCancelled(DatabaseError databaseError) {
DialogHandler.dismissLoadingDialog();
}
}, Constants.DB_OBJS);
这是ProgressDialog的代码。
public static void showLoadingDialog(final Context context, final int title, final String message, final boolean indeterminate, final boolean cancelable) {
dismissLoadingDialog();
loadingDialog = new ProgressDialog(context);
loadingDialog.setTitle(title);
loadingDialog.setMessage(message);
loadingDialog.setIndeterminate(indeterminate);
loadingDialog.setCancelable(cancelable);
loadingDialog.show();
}
public static void updateLoadingDialog(final int title, final String message) {
if (loadingDialog != null && loadingDialog.isShowing()) {
loadingDialog.setTitle(title);
loadingDialog.setMessage(message);
}
}
当我尝试在任何方法上执行此操作时,工作正常,但是当我尝试使用Firebase数据库的监听器时,无法正常工作。
感谢您的帮助。
答案 0 :(得分:0)
您对听取数据的理解并不完全正确。附加侦听器时会开始下载数据。如果尚未建立连接,则建立连接。下载完成后会运行onDataChange()
。另请注意,onDataChange()
在Main / UI线程上运行,因此无需调用runOnUiThread()
。
onDataChange()
方法中的SQLite查询和更新应该在不到一秒的时间内执行,可能大约200毫秒,因此在此期间不需要显示对话框。