2015-11-27 4 views
1

Это мои данные:Запрос Firebase на Android

{ 
    "users" : { 
    "00c49c66-7ac8-9a48-7c4541d8bac6" : { 
     "email" : "[email protected]", 
     "gender" : "m", 
     "name" : "deepak", 
     "user_id" : "00c49c66-7ac8-9a48-7c4541d8bac6" 
    }, 
    "1cb9c1de-1fcf-a2cc-bf78c84e03c8" : { 
     "email" : "[email protected]", 
     "gender" : "f", 
     "name" : "ekta", 
     "user_id" : "1cb9c1de-1fcf-a2cc-bf78c84e03c8" 
    }, 
    "38211c3f-6c48-8987-0c698b9b9b52" : { 
     "email" : "[email protected]", 
     "gender" : "m", 
     "name" : "chirag", 
     "user_id" : "38211c3f-6c48-8987-0c698b9b9b52" 
    }, 
    "a536cf1f-419f-9658-cfb5f5a8ec78" : { 
     "email" : "[email protected]", 
     "gender" : "m", 
     "name" : "aniket", 
     "user_id" : "a536cf1f-419f-9658-cfb5f5a8ec78" 
    }, 
    "c80d828d-48d7-a79a-9cc558cd1960" : { 
     "email" : "[email protected]", 
     "gender" : "f", 
     "name" : "bhakti", 
     "user_id" : "c80d828d-48d7-a79a-9cc558cd1960" 
    } 
    } 
} 

Теперь я хочу получить «имя» и «идентификатор», где «пол» является «м»

Пожалуйста, может кто-нибудь сказать мне, как запустить такой запрос от клиента Android к firebase.

Я пробовал учебники, предоставленные firebase и несколькими другими ссылками, но не прошел.

Большинство решений в Javascript мне нужно для Android в java api firebase.

Я попытался это

public class ActivityHome extends Activity { 
    String strLoggedInUserID; 
    TextView tvData; 
    Firebase fbRef = new Firebase("https://myurl.com/users"); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     tvData = (TextView) findViewById(R.id.tvData); 

     Query queryRef = fbRef.orderByChild("gender").equalTo("m"); 

     Bundle extras = getIntent().getExtras(); 
     strLoggedInUserID = extras.getString("userID"); 

     fbRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 

     queryRef.addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

       //long longChildCount = dataSnapshot.getChildrenCount(); 

       // tvData.setText(dataSnapshot).toString(); 
       tvData.setText(s); 

      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

      //tvData.setText(s); 

      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 

    } 
} 

ответ

3

Ваш код выглядит правильно выполнение запроса, но вы не печатает пользователь.

Поскольку вы добавляете ChildEventListener, он будет вызываться для каждого ребенка:

queryRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

     //long longChildCount = dataSnapshot.getChildrenCount(); 

     // tvData.setText(dataSnapshot).toString(); 
     tvData.setText(s); 

    } 

Параметр dataSnapshot содержит информацию об одном пользователе. Для того, чтобы напечатать их ключ, имя и адрес электронной почты:

queryRef.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     System.out.println(dataSnapshot.key()); 
     System.out.println(dataSnapshot.child("name").getValue()); 
     System.out.println(dataSnapshot.child("email").getValue()); 
    } 

В качестве альтернативы, вы можете слушать все ребенок сразу с ValueEventListener.

private static class User { 
    String email; 
    String gender; 
    String name; 
    @JsonProperty("user_id") 
    String userId; 

    public String getEmail() { return email; } 
    public String getGender() { return gender; } 
    public String getName() { return name; } 
    public String getUserId() { return userId; } 
} 
queryRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot child: dataSnapshot.getChildren()) { 
      User user = child.getValue(User.class); 
      System.out.println(user.getEmail()); 
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 
    } 
}); 

В этом последнем фрагменте я также использовать User класс для получения данных из DataSnapshot. По мере роста вашего приложения это будет более удобным, чем постоянное обращение DataSnapshot.child().

Это покрытие находится в section on reading data in the Firebase documentation.

+0

Благодарим вас, Sir @Frank van Puffelen, как приступил к работе над приложением, возможно, потребуется дополнительная помощь :) – Bhushan

+1

Прежде чем продолжить свое приложение, вам будет полезно прочитать все руководство по программированию, к которому я привязался. Через несколько часов вы сэкономите много времени и вопросов на линии. –

+0

Да будет делать спасибо :) – Bhushan

Смежные вопросы