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

Rya*_*yan 6 java encoding android json firebase

我的Android应用程序连接到Firebase并提取由我的服务器发送的"警报对象".

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

问题:当我使用DataSnapshot将数据拉到我的Android设备时,数据有'='(等号)而不是':'(分号).报价也不存在.

当我尝试做某些事情时,JSONObject alert = new JSONObject(data.getValue().toString());我会因为明显的原因而出错.我说得很明显,因为如果你看看我的代码打印到控制台的内容,你会发现它不再是有效的JSON格式.

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

我怎样才能通过,我创建了这些(有点奇怪)警报对象进行迭代,并把它们变成JSON对象我的Java之内,这样我可以像访问它们的属性alert.datealert.message.

我认为截图会帮助你看到我在做什么.firebase完全没有安全保障,所以你可以随意看看它.它不会真正做很多事情,当我去制作时,无论如何我都会移动它.

Firebase截图

直接从Firebase网站导出JSON

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

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

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

谢谢!

小智 7

你可以使用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);

        }
Run Code Online (Sandbox Code Playgroud)


Fra*_*len 6

您无法在Java中本机访问JSON.

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

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

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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