Android在onCreate

时间:2017-02-08 04:05:39

标签: android asynchronous firebase firebase-realtime-database

所以我遇到了一个有趣的问题,我不确定如何继续。

我正在编写的应用程序的主题会根据用户所处的状态而变化。为了实现这一点并在应用程序关闭期间保持状态,我将状态存储在sharedPreferences中并将其检索到onCreate()方法,然后在setTheme(R.style.myTheme)调用之前调用super.onCreate(),据我所知,这是在不重新启动整个活动的情况下动态设置活动主题的唯一方法。< / p>

我现在想要将状态变量存储在Firebase中并在运行时检索它以相应地更新主题。这样,用户可以在不同的设备上打开应用程序,登录并正确地设置界面。到目前为止,我从firebase检索数据的方法是在需要访问Firebase数据并从DatabaseCallback调用方法的每个类上实现一个名为DatabaseCallback的接口,以通知类它需要的数据可用。

以下是一个例子:

public void getUserByUid(String uid, final DatabaseCallback c) {
    DatabaseReference userRef = db.getReference("users/" + uid);
    userRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            c.onGetUser(dataSnapshot.getValue(User.class));
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

这就是出现问题的地方。当我在getUserByUid()中调用onCreate()方法时,在 onCreate()完成后阻止我无法更新主题时,才会进行回调。有关更好地实现获取数据的想法/更新主题的不同方式没有重新启动活动吗?

1 个答案:

答案 0 :(得分:0)

将您的firebase侦听器移动到intent服务或Async任务中,然后将其保存到sharedPreferences,然后您可以按离键加载方式更改主题。