【问题标题】:Firebase Recycler Adapter not working in signed apkFirebase Recycler Adapter 在签名的 apk 中不起作用
【发布时间】:2018-03-16 12:22:58
【问题描述】:

首先是 Debug APK 结果,其次是 Signed APK 结果:

好吧,下面是代码: 我已经在堆栈中搜索了类似的问题,但没有任何帮助。

        FirebaseRecyclerAdapter<EventDisplayModel,PostViewHolder> fireImageAdapter = new FirebaseRecyclerAdapter<EventDisplayModel, PostViewHolder>
            (EventDisplayModel.class,R.layout.parent_event_display_style,PostViewHolder.class,dbRef)
    {
        @Override
        protected void populateViewHolder(PostViewHolder viewHolder, EventDisplayModel model, int position) {
            viewHolder.setTitle(model.getTitle());
            viewHolder.setDescription(model.getDescription());
            viewHolder.setDownload_URL(getApplicationContext(), model.getDownload_URL());
            viewHolder.setDateTime(model.getDate_Time());
            if(model.getLat_Lng()==null)
            {
                viewHolder.setVenue(model.getVenue());
            }
            else
            {
                viewHolder.setLat_Lng(model.getLat_Lng());
            }
        }
    };

    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(fireImageAdapter);

这是 postviewholder 类

public static class PostViewHolder extends RecyclerView.ViewHolder{

    View mView;

    public PostViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setTitle(String title){
        TextView post_title = mView.findViewById(R.id.tvPostTitle);
        post_title.setText(title);
    }

    void setDescription(String description){
        TextView post_desc = mView.findViewById(R.id.tvPostDesc);
        post_desc.setText("Description : " + description);
    }

    //Set Download_URL
    //Set Date_time
    //Set Venue
    //Set Lat_Lng      
}

最后:

public class EventDisplayModel {

private String Title;
private String Description;
private String Download_URL;
private String Date_Time;
private String Venue;
private String Lat_Lng;

public EventDisplayModel(){}

public EventDisplayModel(String title, String description, String download_URL, String date_Time, String venue, String lat_Lng) {
    Title = title;
    Description = description;
    Download_URL = download_URL;
    Date_Time = date_Time;
    Venue = venue;
    Lat_Lng = lat_Lng;
}
   //Getter and setter methods here
}

那么,我哪里错了?我想把它从生产版本中删除。

【问题讨论】:

  • 你开始用onStart()方法收听了吗?
  • 我没有使用监听器。一旦用户选择了事件,这个活动就会打开。这段代码在 onCreate()
  • 我忘了通知...标题正在由适配器获取,但其他标题为空

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


【解决方案1】:

嘿,你需要检查 proguard 规则。

如果您忘记在 proguard 中包含依赖项,则会出现此问题。

【讨论】:

  • Proguard 未启用。 minifiENabled 为假。
  • 您必须先检查您的回复。无论您是否收到回复
  • 如何调试已签名的 apk?
  • 使用 PostMaster chrome 扩展提出请求,并检查。或者您可以使用 firebase 分析或 crashlytics 来记录响应。
  • 我刚刚检查过了。好吧,日志和 Google Play 控制台中没有错误/异常。
【解决方案2】:

首先将fireImageAdapter 变量设为全局变量。

FirebaseRecyclerAdapter<EventDisplayModel,PostViewHolder> fireImageAdapter;

然后只需删除您初始化适配器的FirebaseRecyclerAdapter&lt;EventDisplayModel,PostViewHolder&gt;

所以为了解决这个问题,你需要重写onStart()方法并添加以下代码行:

@Override
protected void onStart() {
    super.onStart();
    fireImageAdapter.startListening();
}

【讨论】:

  • fireImageAdapter 没有那个方法。我的 firebase ui 版本是 0.4.0
  • 在这种情况下,我强烈建议您将 Firebase-UI 更改为最新版本,目前是 3.2.2,并使用其新功能。
  • 您是否尝试过使用最新版本的 Firebase-UI?
  • 不,公司希望尽快更新,使用 firebase ui 重构代码是一项艰巨的任务,因此我决定将其删除。
【解决方案3】:

你好,我知道它迟到了,但为了未来

检查你的 gradle 文件,它的发布应该是这样的

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }

}

按照文档中的说明保留 Proguard 文件

更多 -> 确保您在 Firebase 控制台中添加了发布和调试 SHA,并且新的 googleservices 文件在您的项目中可用

谢谢

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2017-04-13
    • 2023-03-25
    • 2019-06-21
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多