1

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

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

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


的主要活动......如果一个用户登录,如果没有,启动认证活动

  • 包含一个对象DatabaseHandler,这是负责数据库

    • 检查访问时,此对象需要实例化一个UserInfo对象
    • 包含FirebaseAuth对象附加了AuthStateListener
    • AuthStateListener检查如果用户已登录,如果是的话,将与当前用户
    • 应能显示从DatabaseHandler

    检索的某些数据重新实例化DatabaseHandler对象我的问题

    我已经需要访问的onCreate()方法中的DatabaseHandler对象2882​​显示一些数据,但自DatabaseHandler的方法onAuthStateChanged()被实例化,以确保已经有登录的用户,这是行不通的,因为onCreate()之前onAuthStateChanged()


    我的想法

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

    让我知道你在想什么

  • +0

    据我了解,你不**有**在'onCreate'中获取并显示你的数据。您可以从您的活动中的另一个自定义方法更新UI。你需要在这个方法中'查找'UI元素,或者将它们声明为Activity类的字段,并在'onCreate'中'查找'它们。如果你愿意,我可以发表一个我的意思的例子。 – Barthy

    +0

    正如我所说的,我并不熟悉android概念。我使用的是recylcer视图,大部分都是从教程中获得的代码,并且在本教程中,我必须在'onCreate()'方法中声明recylcerview的内容 –

    回答

    0

    下面的代码要显示书籍的列表,假定活动的一个例子:

    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中的用户并行为一致ingly
    • 获取数据,并从populateList,它允许重新填充列表,而不通过所有的onCreate东西去显示它(记得clear列表/适配器
    +0

    这看起来很有希望。当我回到我的电脑时,我会详细回顾一下。 –

    +0

    @IanFako嗨伊恩,这有什么进展?我的回答对你有帮助吗? – Barthy