Firebase从逗号分隔值保存数据

时间:2020-01-08 06:07:29

标签: json firebase firebase-realtime-database

我的php下面有Json回复

enter image description here

目前,我有以下代码将数据插入Firebase

        JSONArray arr = new JSONArray(result);
        //JSONObject jObj = arr.getJSONObject(0);
        String[] stocks = new String[arr.length()];

        for(int i=0;i<arr.length();i++){

            JSONObject obj = arr.getJSONObject(i);

            mDatabase= FirebaseDatabase.getInstance().getReference().child(context.getResources().getText(R.string.bid_request).toString().trim());

            Map<String, Object> userValues = new HashMap<>();
            DatabaseReference newBid=mDatabase.push();
            userValues.put("uid", obj.getString("user_id"));
            userValues.put("uNme",obj.getString("first_name")+" "+obj.getString("last_name"));
            userValues.put("uMoble", obj.getString("user_mobile"));
            userValues.put("uAvtr",  obj.getString("src"));
            userValues.put("uRat",  obj.getString("user_ratings"));

            userValues.put("pck", obj.getString("pickup_location"));
            userValues.put("drp",obj.getString("drop_location"));
            userValues.put("pLat", obj.getString("pickup_latitude"));
            userValues.put("pLan",  obj.getString("pickup_longitude"));
            userValues.put("dLat", obj.getString("drop_latitude"));
            userValues.put("dLan",  obj.getString("drop_longitude"));
            userValues.put("did",obj.getString("driver_id"));
            userValues.put("dMoble", obj.getString("driver_mobile"));        

            newBid.setValue(userValues, new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
            });

它正在按以下Firebase结构保存数据

enter image description here

我想做的是将每个逗号分隔的移动电话(与json响应分开)保存为以下firebase结构。我该如何实现

enter image description here

2 个答案:

答案 0 :(得分:1)

在这里,您将整个,分开的电话号码当作一个字符串。因此Firebase假定该字符串为单个字符串。要分别添加电话号码,您需要分割手机号码字符串并将其存储在数组中。通过对该数组进行foreach循环,可以添加带有索引的单个数字。

如果单个节点中使用了相同的密钥,则Firebase会覆盖该值,因此,要分别添加每个移动电话号码,您需要为每个移动电话号码设置不同的密钥值。

答案 1 :(得分:1)

Json对象中不能有多个具有相同名称的键,您可以做的一件事是将其存储为String的数组列表,同时将数据添加到实时数据库中,并用跟随

userValues.put("dMoble", obj.getString("driver_mobile").split(","));

如果您想输入一个ed:- mobilenum 和每个手机号码,请尝试以下解决方案

            List<HashMap<String ,String>> dMobiles  = new ArrayList<>();
            for (String mobilenum:jsonObject.getString("driver_mobile").split(",")){
                HashMap<String,String> mobileMap = new HashMap<>();
                mobileMap.put("mobilenum",mobilenum);
                dMobiles.add(mobileMap);
            }
            userValues.put("dMoble",dMobiles);