繁体   English   中英

Android Firebase - 无法从 Firebase 快照接收正确的 JSON

[英]Android Firebase - Can't receive proper JSON from Firebase snapshot

我的 android 应用程序连接到 Firebase 并提取由我的服务器发送到那里的“警报对象”。

当我从 Firebase 导出数据时,我得到了格式精美的数据 JSON 表示。

问题:当我使用 DataSnapshot 将数据拉到我的 android 设备时,数据有“=”(等号)而不是“:”(分号)。 引用也不在那里。

当我尝试做类似JSONObject alert = new JSONObject(data.getValue().toString()); 由于明显的原因,我收到错误。 我说这是显而易见的,因为如果您查看我的代码打印到控制台的内容,您会发现它不再是有效的 JSON 格式。

一个朋友提到我需要对编码做一些事情,但我们没有时间讨论它。

我如何遍历我创建的这些(有点奇怪)警报对象并将它们转换为我的 Java 中的 JSON 对象,以便我可以访问它们的属性,如alert.datealert.message

我认为截图会帮助你了解我在做什么。 Firebase 根本不安全,因此您可以随意查看它。 它不会真正起多大作用,当我进入生产阶段时,无论如何我都会移动它。

Firebase 屏幕截图

直接从 Firebase 网站导出 JSON

Android Studio 中的代码将每个对象打印到控制台

运行应用程序时输出到控制台

我确信这是一个非常容易回答的问题,我只是不太熟悉 JSON 和整个编码。

谢谢!

你可以使用 gson 库

       public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            /*JSONObject jsonObject = null;
            try {
                jsonObject=new JSONObject();

            } catch (JSONException e) {
                e.printStackTrace();
            }*/
            Gson gson = new Gson();
            String s1 = gson.toJson(dataSnapshot.getValue());
            JSONArray object = null;
            try {
                object = new JSONArray(s1);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            JSONArray jsonArray = object;

            Log.e("string", s1);

        }

您无法在 Java 中本地访问 JSON。

Firebase DataSnapshot提供了您需要的一切。

如果您在屏幕截图中的fbAlerts处有数据的DataSnapshot ,您可以打印每个的日期+消息和收件人:

for (DataSnapshot alert: alerts.getChildren()) {
  System.out.println(alert.child("date").getValue();
  System.out.println(alert.child("message").getValue();
  for (DataSnapshot recipient: alert.child("recipients").getChildren()) {
    System.out.println(recipient.child("name").getValue();
  }
}

或者,您可以构建一个表示警报的 Java 类。 有关示例,请参阅有关在 Android 中读取数据Firebase 指南

使用这种方式将jsonObject从dataSnapshot中转换

Map<String, String> value = (Map<String, String>) dataSnapshot.getValue();
Log.i("dataSnapshot", "dataSnapshot" + new JSONObject(value));

从上面的代码摘录中,看起来您有一个 JSONArray 而不是 JSONObject。

在这种情况下,您需要执行以下操作:

// Find the right array object
JSONArray jsonArray = response.getJSONArray("fbAlerts"); 

// Loop through the array
for (int i=0; i< jsonArray.length(); i++) {
    JSONObject myObj = jsonArray.getJSONObject(i); 
    strMsg = myObj.getString("message");
} 

在示例中 - 当您有重复组时,这似乎表示一个数组,因此需要一个迭代器来访问对象内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM