【问题标题】:Android Firebase code organization (concept)Android Firebase 代码组织(概念)
【发布时间】:2017-07-27 11:04:45
【问题描述】:

我正在使用 Firebase 开发我的第一个 Android 应用。这也是我整体上的第一个 android 应用程序,所以我没有经验,但已经对 Java 或 PHP 等编程语言有一些经验。我正在寻找专业建议,因为我的代码组织遇到了一些问题。我已经做了一些研究,但无法找到一个好的解决方案。

我的应用使用 Firebase 身份验证和 Firebase 实时数据库。

我将解释我的问题的所有相关部分。


主要活动...

  • 检查用户是否已登录,如果未登录,则启动身份验证活动
  • 包含一个Object DatabaseHandler,负责数据库访问,这个对象需要一个UserInfo对象来实例化
  • 包含一个FirebaseAuth 对象,附加一个AuthStateListener
  • AuthStateListener 检查用户是否已登录,如果已登录,它将使用当前用户重新实例化DatabaseHandler 对象
  • 应该能够显示从DatabaseHandler 检索到的一些数据

我的问题

我已经需要访问MainActivityonCreate() 方法中的DatabaseHandler 对象以显示一些数据,但是由于DatabaseHandler 在方法onAuthStateChanged() 中被实例化,因此要确保存在已经是用户登录了,这个不行,因为onCreate()是在onAuthStateChanged()之前调用的


我的想法

我不完全确定如何解决这个问题,但我的第一个想法是重组我的项目,使我的主要活动只检查要调用的活动,而不是自己显示数据。我仍处于项目的早期阶段,所以这应该不是什么大问题。 只是想知道这是否可行,或者是否有更好的解决方案。

让我知道你的想法

【问题讨论】:

  • 据我了解,您没有onCreate 中获取和显示您的数据。您可以从 Activity 中的另一个自定义方法更新 UI。然后,您需要在此方法中“查找”UI 元素,或者将它们声明为 Activity 类的字段并在 onCreate 中“查找”它们。如果您愿意,我可以发布一个示例来说明我的意思。
  • 如前所述,我对 android 概念并不熟悉。我正在使用 recycler 视图,主要是从教程中获得的代码,从本教程开始,我必须在 onCreate() 方法中声明 recyclerview 的内容

标签: android firebase firebase-realtime-database firebase-authentication code-organization


【解决方案1】:

这是一个假设您想要显示图书列表的活动示例:

public class MainActivity extends AppCompatActivity {
    private List<Book> bookList = new ArrayList<>();
    private RecyclerView recyclerView;
    private BookAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        adapter = new BookAdapter(bookList);

        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);

        FirebaseAuth auth = FirebaseAuth.getInstance();
        FirebaseUser user = auth.getCurrentUser();
        if (user != null) {
            // User is still logged in
            // Get UserInfo and instantiate DatabaseHandler
            populateList();
        } else {
            // No user is logged in, go to auth activity
        }
    }

    private void populateList() {
        // Get Books from Firebase and add them to the adapter
        Book book = new Book();
        bookList.add(book);

        // Notify the adapter, so that it updates the UI
        adapter.notifyDataSetChanged();
    }
}

有了它,您可以执行以下操作:

  • 创建并实例化onCreate中的所有对象
  • 检查onCreate 中的用户并采取相应措施
  • populateList 获取数据并显示它,这允许重新填充列表而无需遍历所有onCreate 内容(记住clear 列表/适配器

【讨论】:

  • 这看起来很有希望。当我回到我的电脑时,我将详细回顾这一点。
  • @IanFako 嘿,伊恩,这有什么进展吗?我的回答对你有帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2018-01-08
相关资源
最近更新 更多