web-dev-qa-db-ja.com

androidでfirebaseデータベースから特定のノードを取得する方法

FirebaseをAndroidアプリケーションで使用しようとしています。 Saving および retrieving のドキュメントに従いますが、サンプルデータベース(Dragon)チュートリアルで使用されているデータベースの構造は、データベースとは異なります。

これは、データをfirebaseにプッシュするための私のコードです

Firebase myFirebaseRef = new Firebase("https://myfirebaseurl.firebaseio.com/Android/saving-data/fireblog");
                User userName = new User(socialNum, name, datofBirth, mob1, mob2, healthCondition);
                Firebase usersRef = myFirebaseRef.child(name);
                Map<String, User> users = new HashMap<String, User>();
                users.put(name, userName);                    
              myFirebaseRef.Push().setValue(users);

このようなデータベース形式を作成します

{
      "Android" : {
        "saving-data" : {
          "fireblog" : {
            "-JiRtkpIFLVFNgmNBpMj" : {
              "Name" : {
                "birthDate" : "100",
                "fullName" : "Name",
                "healthCond" : "fyhft",
                "mob1" : "5855",
                "mob2" : "5858",
                "socialNumber" : "100"
              }
            },
            "-JiRv0RmHwWVHSOiZXiN" : {
              "mast" : {
                "birthDate" : "100",
                "fullName" : "mast",
                "healthCond" : "fyhft",
                "mob1" : "5855",
                "mob2" : "5858",
                "socialNumber" : "100"
              }
            }
          }
        }
      }
    }

Firebaseからデータを取得して、アプリの検索ボックスに「フルネーム」を入力すると、その特定のノードを取得して、リストビューにその情報を入力できるようにします。

これは私が取得しようとしている方法です、

final String Find = find.getText().toString();   //Get text for search edit text box
                Firebase myFirebaseRef = new Firebase("https://myfirebaseurl.firebaseio.com/Android/saving-data/fireblog");
                Query queryRef = myFirebaseRef.orderByChild("fullName");
               // System.out.println(dataSnapshot.getKey() + "is" + value.get("socialNumber"));
                System.out.println(Find);

                queryRef.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String previousChild) {
                        System.out.println(dataSnapshot.getValue());
                        Map<String,Object> value = (Map<String, Object>) dataSnapshot.getValue();

                        String name1 = String.valueOf(value.get("fullName"));
                    //System.out.println(dataSnapshot.getKey() + "is" + value.get("fullName").toString());
                    if (name1.equals(Find)){
                        System.out.println("Name" + value.get("fullName"));
                    }
                    else{
                        System.out.println("its is null");
                    }

                    }

しかし、すべてのノードを返します。

02-19 12:18:02.053    8269-8269/com.example.nilesh.firebasetest I/System.out﹕ name
02-19 12:18:05.426    8269-8269/com.example.nilesh.firebasetest I/System.out﹕ {Name={socialNumber=100, birthDate=100, fullName=Name, mob1=5855, mob2=5858, healthCond=fyhft}}
02-19 12:18:05.426    8269-8269/com.example.nilesh.firebasetest I/System.out﹕ its is null
02-19 12:18:05.426    8269-8269/com.example.nilesh.firebasetest I/System.out﹕ {mast={socialNumber=100, birthDate=100, fullName=mast, mob1=5855, mob2=5858, healthCond=fyhft}}
02-19 12:18:05.426    8269-8269/com.example.nilesh.firebasetest I/System.out﹕ its is null

FullName = mastと入力した場合、特定のノードを取得して、そのノードのすべてのフィールドを持つ2番目のノードのみを取得する必要があります。

15
gooner

次の行でクエリを作成しています:

Query queryRef = myFirebaseRef.orderByChild("fullName");

そのように、クエリはfullName値で子ノードを順序付けます。ただし、返される子ノードはまだ制限されていません。

ノードを制限するには、フィルタリングする必要もあります。例えば。:

Query queryRef = myFirebaseRef.orderByChild("fullName").equalTo("gooner");

startAtの代わりにendAtequalToでフィルタリングすることにより、ノードの範囲を取得することもできます。

加藤がコメントしたように:

子どものレベルが余分にあるようです。データはsaving-data/fireblog/<record id>/fluff/...actual data..。また、これらのクエリが機能するには、綿毛層を削除する必要があります。子の子を照会することはできません。

23

これは、Hashmapを使用してfirebaseデータベースから単一の値を取得する別の方法です。

     ArrayList<HashMap<String,String>> AllUserscourselist;
 String SelectedCourseUserUId;
     DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

     databaseReference.child("User_course_Details").addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
    //                        emergencyContactsList = new ArrayList<>();
                    AllUserscourselist = new ArrayList<HashMap<String, String>>();
                    if(dataSnapshot.exists())
                    {
                        for(DataSnapshot postSnapShot:dataSnapshot.getChildren())
                        {

                            for (DataSnapshot courseUID : postSnapShot.getChildren()){
                                UsercourseDetails usercourseDetails = courseUID.getValue(UsercourseDetails.class);
                                HashMap<String, String> map = new HashMap<String, String>();

                                String user_id = postSnapShot.getKey();
                                String course_id = usercourseDetails.getcourse_id();
                                String course_type = usercourseDetails.getcourse_type();
                                String course_brand = usercourseDetails.course_brand;
                                String course_number_plate_url = usercourseDetails.course_number_plate_url;

                                map.put("user_id", user_id);
                                map.put("course_id", course_id);
                                map.put("course_type", course_type);
                                map.put("course_brand", course_brand);
                                map.put("course_number_plate_url", course_number_plate_url);

                                AllUserscourselist.add(map);
                            }

    //                        AllUserscourselist.add(new UsercourseDetails(usercourseDetails.getcourse_type(),usercourseDetails.getcourse_brand(),usercourseDetails.getcourse_number_plate_url(),usercourseDetails.getcourse_id()));
                        }

                        Log.e("AllUserscourselist",""+AllUserscourselist);

                        courseIdList = new ArrayList<String>();
                        for (int i = 0; i < AllUserscourselist.size(); i++) {
                            String course_id_list;
                            course_id_list = AllUserscourselist.get(i).get("course_id")+" "+ AllUserscourselist.get(i).get("user_id");
                            courseIdList.add(course_id_list);
                        }

                        if(courseIdList.size()>0 && courseIdList!=null) {
                            for (int i = 0; i < courseIdList.size(); i++) {   //used
                                String arr[] = courseIdList.get(i).split(" ");
                                if (arr[0].equals(coursenumber)) {
                                    SelectedcourseUserUId = arr[1];
                                    getUserEmergencyContacts(SelectedcourseUserUId);
                                    break;
                                }
                            }
                        }

                    }else{
    //                    NavigationActivity.this.overridePendingTransition(R.anim.anim_slide_in_left, R.anim.anim_slide_in_left);
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
0
viral 9966

データを取得したばかりの同じキーの下にさらにノードを追加する場合はどうでしょうか?例えば:

"Android" :{

        "saving-data" : {
          "fireblog" : {
            "-JiRtkpIFLVFNgmNBpMj" : {
              "Name" : {
                "birthDate" : "100",
                "fullName" : "Name",
                "healthCond" : "fyhft",
                "mob1" : "5855",
                "mob2" : "5858",
                "socialNumber" : "100"
"More Info" : {

                "status" : "100",
                "gender" : "Name",
                "gfg" : "fyhft",
                "fgfg" : "5855",
                "fgf" : "5858",
                "fgf" : "100"
              }
0
Ahmed Imam