【问题标题】:Firebase RecyclerView not working properly, getting null values in released apkFirebase RecyclerView 无法正常工作,在发布的 apk 中获取空值
【发布时间】:2019-07-20 03:00:57
【问题描述】:

Firebase recyclerview 在发布模式下未显示预期结果,但在调试模式下正常工作。它在发布模式下给出空值,但在调试应用模式下显示正确的值。

Firebase 在回收站视图中返回空值。

Firebase Recycler查看代码:

//For setting time
    /*CarouselModel carouselModel = new CarouselModel("Tomorrow's QuizPoint at 10:00 PM","₹50,000","1562587387000","1562587389000");
    quizTiming.push().setValue(carouselModel);*/

    Query query = FirebaseDatabase.getInstance()
            .getReference()
            .child("quizTimings");

    FirebaseRecyclerOptions<CarouselModel> options =
            new FirebaseRecyclerOptions.Builder<CarouselModel>()
                    .setQuery(query, CarouselModel.class)
                    .build();

    scrollView = (RecyclerView) findViewById(R.id.picker);

    adapter = new FirebaseRecyclerAdapter<CarouselModel, TimeViewHolder>(options) {

        @Override
        public TimeViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.item_time, viewGroup, false);

            return new TimeViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(TimeViewHolder timeViewHolder, int i, final CarouselModel carouselModel) {

            try {
                if (carouselModel.getTime()!=null && !carouselModel.getTime().isEmpty()){
                    String quizTimings = carouselModel.getTime();
                    timeViewHolder.timeShow.setText(quizTimings);
                }else {
                    timeViewHolder.timeShow.setText("error Time");
                }

                if (carouselModel.getTimeMoney()!=null && !carouselModel.getTimeMoney().isEmpty()){
                    String timeMoney = carouselModel.getTimeMoney();
                    timeViewHolder.timeMoney.setText(timeMoney);
                }else {
                    timeViewHolder.timeMoney.setText("error TimeMoney");
                }
            } catch (Exception ex) {
                String err = (ex.getMessage()==null)?"QuizTiming error":ex.getMessage();
                Log.e("quiztiming logs","error "+err);
            }
        }
    };

    CustomLinearLayout linearLayoutManager = new CustomLinearLayout(this,LinearLayoutManager.HORIZONTAL,false);

    scrollView.addItemDecoration(new LinePagerIndicatorDecoration(MainActivity.this));
    scrollView.setLayoutManager(linearLayoutManager);
    scrollView.setAdapter(adapter);

【问题讨论】:

    标签: android firebase firebase-realtime-database firebaseui


    【解决方案1】:

    确保你的 pojo 类是公开的并添加

    @Keep
    

    到用于检索和显示 Firebase 数据的 pojo 类(如果您正在使用)

    minifyEnabled true
    

    【讨论】:

    • 非常感谢。它解决了这个问题。我不得不在 proguard 文件中添加 keep 语句,现在 recyclerview 在发布版本中也可以正常工作。
    【解决方案2】:
    1. 您必须从 Playstore 控制台更新最新的 SHA1 密钥

    Playstore 控制台 --> 发布管理 --> 应用签名 --> 应用签名证书(顶部) --> SHA1 副本 并粘贴到您的 Firebase --> 项目设置--> 添加指纹

    1. 现在下载最新的 google-service.json 文件并在您的 android studio 中替换文件。

    2. 如果 minifyEnabled 为 true (build.gradle(app)),您必须在 proguard-rules.pro 中编写 progurd 规则

    【讨论】:

    • 是的,我已经这样做了。这些都不是问题。我正在从 firebase 获取数据并从其他节点使用它。只是 recyclerview 不起作用。
    • 这个怎么样 --> 如果 minifyEnabled true (build.gradle(app)) 你必须在 proguard-rules.pro 中编写 progurd 规则
    猜你喜欢
    • 2020-10-03
    • 2020-10-31
    • 2017-07-22
    • 2021-09-03
    • 2018-11-21
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多