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

时间:2016-05-07 17:17:30

标签: java android json encoding firebase

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

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

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

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

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

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

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

Firebase screenshot

JSON export straight from Firebase website

Code in Android Studio to print each object to console

Output to console when running app

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

谢谢!

4 个答案:

答案 0 :(得分:6)

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

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

如果屏幕截图中的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();
  }
}

或者,您可以构建表示警报的Java类。有关此示例,请参阅Firebase guide on reading data in Android

答案 1 :(得分:6)

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

        }

答案 2 :(得分:4)

使用这种方式将jsonObject转换为dataSnapshot

np.where()

答案 3 :(得分:0)

从上面的代码提取中,看起来你有一个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");
} 

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