代码之家  ›  专栏  ›  技术社区  ›  Gastón Saillén Michael Lehenbauer

如何根据提取的数据启用或禁用应用程序中的功能

  •  3
  • Gastón Saillén Michael Lehenbauer  · 技术社区  · 6 年前

    我正在为一个应用程序开发一个配置文件,该应用程序需要从FireBase数据库中提取一些数据,然后显示到用户配置文件中。

    到目前为止,很好,这项要求已经完成,所有数据都已正确地提取到用户配置文件中。

    但是现在我有了另一个要求,那就是把我的一些功能放在一个地方,我正试图找出如何更好地实现它。

    我用这个方法加载配置文件的所有数据(因为它是一个大方法,所以我将缩小它,但问题不在于代码,而在于逻辑)。

    private void loadprofiledata()。{
    如果(mactivity==null){
    返回;
    }
    
    mprogressbar.setvisibility(view.visible);
    mdatabase.child(“用户”).child(mauth.getcurrentUser().getuid()).addValueEventListener(new ValueEventListener()。{
    @重写
    public void OnDataChange(@nonnull datasnapshot datasnapshot){
    
    if(dataSnapshot.exists()){
    
    usermodel model=dataSnapshot.getValue(usermodel.class);
    
    字符串username=model.getusername();
    .
    .
    .
    //已加载所有数据
    
    mprogressbar.setvisibility(view.gone);
    
    …
    < /代码> 
    
    

    因此,在提取此数据时,我有一个溢出菜单,可以选择编辑用户配置文件。

    现在,在获取我的数据时启用了编辑配置文件选项,我需要使用从FireBase获取的所有用户信息向该活动传递附加信息,以便在此处加载并编辑它。

    现在,我有两种想法

    1. 等待所有异步进程完成,然后启用编辑 导航菜单中的配置文件选项
    2. 在提取数据时保持菜单按钮处于启用状态,并且 当我在那个活动中时再拿一次 重新加载所有数据,而不是将其作为额外的 更有效)但同时我正在为 相同的数据

    有没有更好的方法来实现这个功能?

    但是现在我有了另一个要求,那就是把我的一些功能放到一个地方,我正试图找出更好的方法。

    我用这个方法加载配置文件的所有数据(因为它是一个很大的方法,所以我将缩小它,但问题不在于代码,而在于逻辑)。

            private void loadProfileData() {
                if (mActivity == null) {
                    return;
                }
    
                mProgressBar.setVisibility(View.VISIBLE);
                mDatabase.child("users").child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    
                        if (dataSnapshot.exists()) {
    
                            UserModel model = dataSnapshot.getValue(UserModel.class);
    
        String username = model.getUsername();
      .
      .
      .
         //All data loaded 
    
        mProgressBar.setVisibility(View.GONE);
    
    ...
    

    所以,在获取这些数据时,我有一个溢出菜单,可以选择编辑用户配置文件。

    enter image description here

    现在,在获取我的数据时启用了编辑配置文件选项,我需要向该活动传递额外的内容,其中包含从FireBase获取的所有用户信息,以便将其加载到该活动并对其进行编辑。

    现在,我有两种想法

    1. 等待所有异步进程完成,然后启用编辑 导航菜单中的配置文件选项
    2. 在提取数据时保持菜单按钮处于启用状态,并且 当我在那个活动中时再拿一次 重新加载所有数据,而不是将其作为额外的 更有效)但同时我正在为 相同数据

    有没有更好的方法来实现这个功能?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Jake Lee    6 年前

    是否可以在后台加载所有用户数据,可能是在应用程序启动时?然后您可以显示编辑按钮,并假定当前的数据缓存是正确的。

    您仍然可以提取数据的最新副本,然后相应地更新UI。 如果 有什么不同。不过,我认为数据不会经常更改,因此提前几分钟加载可能是安全的。

        2
  •  1
  •   Alex Mamo    6 年前

    很好的问题。回答你的问题:

    等待所有异步过程完成,然后在导航菜单中启用编辑配置文件选项。

    在我看来,这是你解决这个问题的推荐方法。等待数据,然后启用按钮。老实说,您不能编辑尚未提供的内容。因此,获取数据,启用按钮,并让用户更新自己的配置文件。

    在获取数据时保持菜单按钮处于启用状态,并在我进入该活动时再次获取(这将重新加载所有数据,而不是将其作为额外数据传递,这将更有效),但同时我对相同数据执行两个请求

    不需要两次获取数据。这将浪费带宽和资源。没有一个好的实践可以反复获取数据,因为您可以重用它。