【问题标题】:Output not showing when the firebase ui upgrade to 3.2.2firebase ui 升级到 3.2.2 时未显示输出
【发布时间】:2018-08-11 08:27:09
【问题描述】:

当我将我的 firebase-ui 版本升级到 3.2.2 时,firebaserecycleradapter 不会显示我的代码的任何输出。起初,当我遇到 multidex 错误时,我将所有库版本升级到最新版本,依赖于应用程序 lvl gradle,升级后发现问题是 Firebaserecycleradapter 方法,然后我搜索它并在运行应用程序后写入,列表视图不显示请帮助我。

onStart():

 @Override
    protected void onStart() {
        super.onStart();

        FirebaseRecyclerOptions <Users> options = new FirebaseRecyclerOptions.Builder<Users>()
                .setQuery(mUserDatabase,Users.class)
                .build();
        FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
            @NonNull
            @Override
            public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.user_list_layout, parent, false);
                return new UsersViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull Users model) {
                holder.setName(model.getName());
                holder.setStatus(model.getStatus());
                holder.setRIDNo(model.getRidno());
                holder.setUserImage(model.getThumb_image(), getApplicationContext());

                //to get key
                final String user_id = getRef(position).getKey();

                holder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent profileIntent = new Intent(UsersActivity.this, ProfileActivity.class);
                        profileIntent.putExtra("user_id", user_id);
                        startActivity(profileIntent);

                    }
                });
            }

        };
        mUsersList.setAdapter(firebaseRecyclerAdapter);

    }

而viewholder是:

//User list viewholder
    public static class UsersViewHolder extends RecyclerView.ViewHolder {

        static View mView;
        private CircleImageView mUserView;

        public UsersViewHolder(View itemView) {
            super(itemView);

            mView = itemView;
        }

        public static void setName(String name){
            TextView userNameView = (TextView) mView.findViewById(R.id.user_single_name);
            userNameView.setText(name);
        }
        public static void setStatus(String status){
            TextView userStatusView = (TextView) mView.findViewById(R.id.user_single_status);
            userStatusView.setText(status);
        }
        public static void setRIDNo(String ridno){
            TextView userRIDNoView = (TextView) mView.findViewById(R.id.user_single_ridno);
            userRIDNoView.setText(ridno);
        }
        public static void setUserImage(String thumb_image, Context ctx){
            CircleImageView userImageView = (CircleImageView) mView.findViewById(R.id.user_single_image);
            Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar).into(userImageView);
        }
    }

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-authentication firebaseui


    【解决方案1】:

    为了使您的代码正常工作,请考虑使用以下步骤。

    1. UsersViewHolder 类的声明中删除 static。应该只有:

      public class UsersViewHolder extends RecyclerView.ViewHolder {/* ... */}
      
    2. 同时从mView 字段和所有方法中删除static 关键字。您的持有人类应如下所示:

      public class UsersViewHolder extends RecyclerView.ViewHolder {
          private View mView;
          private CircleImageView mUserView;
      
          public UsersViewHolder(View itemView) {
              super(itemView);
              mView = itemView;
          }
      
          public void setName(String name){
              TextView userNameView = (TextView) mView.findViewById(R.id.user_single_name);
              userNameView.setText(name);
          }
          public void setStatus(String status){
              TextView userStatusView = (TextView) mView.findViewById(R.id.user_single_status);
              userStatusView.setText(status);
          }
          public void setRIDNo(String ridno){
              TextView userRIDNoView = (TextView) mView.findViewById(R.id.user_single_ridno);
              userRIDNoView.setText(ridno);
          }
          public void setUserImage(String thumb_image, Context ctx){
              CircleImageView userImageView = (CircleImageView) mView.findViewById(R.id.user_single_image);
              Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar).into(userImageView);
          }
      }
      
    3. onStart()方法中的所有代码移到onCreate()方法中,除了这行代码:

      super.onStart();
      
    4. 使您的 firebaseRecyclerAdapter 变量全局化:

      private FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter;
      
    5. 从 onCreate() 方法中删除 FirebaseRecyclerAdapter&lt;Blog, BlogViewHolder&gt;

    6. onStart()onStop() 方法中添加以下代码行。

      @Override
      protected void onStart() {
          super.onStart();
          firebaseRecyclerAdapter.startListening();
      }
      
      @Override
      protected void onStop() {
          super.onStop();
          if(firebaseRecyclerAdapter != null) {
              firebaseRecyclerAdapter.stopListening();
          }
      }
      
    7. 如果你正在使用身份验证,也请不要忘记在onStart()方法中添加这行代码:

      firebaseAuth.addAuthStateListener(authStateListener);
      

    【讨论】:

    • 先生,我无法在第 5 步中说清楚,您能解释一下吗?先生,迟到的回复请见谅
    • 谢谢先生,这对我有用,我知道我的代码出了什么问题,非常感谢@Alex先生
    • 不客气,很高兴听到它奏效了。干杯!
    猜你喜欢
    • 2017-03-14
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多