Google Firebase 序列化/反序列化

2024-01-03

我是 FIRebase 的新手,有两个可能相关的问题。第一个是保存我的事件列表时。

//creating event
TVEvent tvEvent = new TVEvent(etTitle.getText().toString());
User host = ResourceManager.getUser();
String date = etDate.getText().toString();
String location = etLocation.getText().toString();
TVSet tvset = ResourceManager.getUser().getTvSets().get(0);
Event ev = new Event(tvEvent, host, date, location, tvset);
ResourceManager.addEvent(ev);
mDatabase.child("events").child(host.getId()).setValue(ResourceManager.getEvents()); //getEvents() returns a list of events

this is what I get in the consoleenter image description here

问题是 tvevent 和 tv set 的属性比这些多。当我调试以找出为什么 tvevent 是用它的所有属性创建的时,这有点奇怪。但目前我不知道这是否是一个问题,因为我无法从数据库中检索 tvset 和 tvevent。当我执行以下操作时,我得到的值为空。

mDatabase.child("events").addListenerForSingleValueEvent(
    new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            System.out.println("Cheking for events");
            //GenericTypeIndicator<List<Event>> t = new GenericTypeIndicator<List<Event>>() {};
            //List<Event> e = dataSnapshot.getValue(t);
            for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
                GenericTypeIndicator<List<Event>> t = new GenericTypeIndicator<List<Event>>() {};
                List<Event> list = messageSnapshot.getValue(t);
                if (list != null) {
                    for (Event ev : list) {
                        System.out.println("Event found");
                        ResourceManager.addEvent(ev);
                    }
                }
            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

我不知道为什么这些值是空的,因为我可以看到它们不在 firebase 控制台中。那么问题出在哪里呢?

@IgnoreExtraProperties
public class Event {

private TVEvent tvEvent;
private User host;
private Date date;
private String location;
private TVSet tvSet;
private List<User> attending;

public Event(){
}

public Event(TVEvent tvEvent, User host, String date, String location, TVSet tvset){
    this.tvSet = tvset;
    this.tvEvent = tvEvent;
    this.host = host;
    try {
        this.date = new SimpleDateFormat("dd/MM/yyyy").parse(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    this.location = location;

    attending = new ArrayList<>();
}

public User getHost() {
    return host;
}

public String getLocation() {
    return location;
}

public TVSet getTVSet() {
    return tvSet;
}

public Date getDate() {
    return date;
}

public TVEvent getTVEvent() {
    return tvEvent;
}

public void addAttending(User user){
    attending.add(user);
}

public List<User> getAttending(){
    return attending;
}
}

由于 TVSet 和 TVEvent 都没有正确反序列化,我将仅发布其中之一:

@IgnoreExtraProperties
public class TVSet {

private String title;
private String imageFile;
//private Bitmap picture;

public TVSet(){

}

public TVSet(String title){
    this.title = title;
}

public TVSet(Bitmap picture){
    imageFile = compressImage(picture);
}

public void setTitle(String title){
    this.title = title;
}

public String getTitle() {
    return title;
}

private String compressImage(Bitmap image){
    ByteArrayOutputStream bYtE = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.PNG, 100, bYtE);
    //image.recycle();
    byte[] byteArray = bYtE.toByteArray();
    String imageFile = Base64.encodeToString(byteArray, Base64.DEFAULT);
    return imageFile;
}


@Exclude
public Bitmap getImage() {
    byte[] decodedString = Base64.decode(imageFile, Base64.DEFAULT);
    Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    return bitmap;
}

public String getImageFile(){
    return imageFile;
}
}

抱歉格式错误。任何帮助表示赞赏。


尝试使用

Map<String, String> data= (HashMap<String, String>)dataSnapshot.getValue();

代替

GenericTypeIndicator<List<Event>> t = new GenericTypeIndicator<List<Event>>() {}; List<Event> list = messageSnapshot.getValue(t);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Firebase 序列化/反序列化 的相关文章

  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • Firebase 模拟器启动时失败找不到模块 --dns-result-order=ipv4first

    Firebase 模拟器11 0 0无法启动 firebase emulators start 当它到达模拟器 UI 时抛出异常 i ui 模拟器 UI 日志记录到 ui debug log ui 发生致命错误 模拟器 UI 已退出 代码为
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • 从 Firebase 数据库填充微调器

    public class MainActivity extends AppCompatActivity DatabaseReference reference Spinner areaSpinner ArrayList
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • Android Webview 图像未加载

    我制作了一个简单的应用程序WebView 但有些图片无法加载 正确 在我的电脑上 错误 在模拟器中 Correct 错误 没有横幅 于是我用Chrome debug进行调试 发现我的代码被改变了 我不添加像noscript or style
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index

随机推荐