2016-07-13 4 views
1

내가 그렇게함으로써 현재 사용자의 정보를 얻기 위해 시도하고있어 작동하지 :가져 오는 데이터는 안드로이드 제대로

Constants.USER_REF.orderByChild("email").equalTo(email).addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     if (dataSnapshot.exists() && dataSnapshot != null) { 
      // User exists at this point, store it as currentUser variable. 
      User currentUser = dataSnapshot.getValue(User.class); 

      Log.i("THE_SNAPSHOT_AS_STRING:::", dataSnapshot.toString()); 

      // GETTING THE ERROR ON THE LINE BELOW! 
      Log.i("THE_USERS_EMAIL:::", currentUser.getEmail()); 

     } else { 
      // User does not exist at this point. 
      Toast.makeText(TourContactActivity.this, "No user exists.", Toast.LENGTH_SHORT).show(); 

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

     } 
}); 

나는 또한 콘솔 로그에 인쇄 된 다음 얻을, 그래서 그것을 당기는 것을 알고 적절한 사용자.

07-13 15:16:18.391 32277-32277/thepassapp.thompson.com.tomstours I/THE_SNAPSHOT_AS_STRING:::: DataSnapshot { key = users, value = {00845752-985f-4779-8eff-0c1e6a016ad8={tour_director_key=70af128e-777b-4c12-86f6-2952dbdc9185, last_name=River, [email protected], location_latitude=42.4305, tour_id=n1337e, photo=http://chopu.herokuapp.com/parse/files/2enxs2j21mz9/7304a8917568d366a8ec43f5ab88ac6b_user.jpg, tour_director_name=Chuck Thoms, middle_name=, location_longitude=-73.5103, passenger_id=mcu79, location_updated=1468360656387, tour_director=f9e3z, first_name=Gene, provider=password}} } 

은 여기 내 User.class

@JsonIgnoreProperties(ignoreUnknown=true) 

public class User { 

    private String uid; 
    private String email; 
    private String first_name; 
    private String last_name; 

    public User() { 

     // empty default constructor, necessary for Firebase to be able to deserialize users 

    } 
    public User(String uid, String first_name, String last_name, String email) { 
     this.uid = uid; 
     this.first_name = first_name; 
     this.last_name = last_name; 
     this.email = email; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public String getFirstName() { 
     return first_name; 
    } 
    public String getLastName() { 
     return last_name; 
    } 

    @Override 
    public String toString() { 
     return "User{uid='"+uid+"', email='"+email+"', first_name='"+first_name+"', last_name='"+last_name+"\'}"; 

    } 

} 

내 문제가 실제로 사용자 클래스에서이 데이터를 검색입니다. 문서를 따라했지만 오류가 계속 발생합니다.

FATAL EXCEPTION: main 

Process: passengerapp.veriguide.com.veriguidetours, PID: 32277 
java.lang.NullPointerException: println needs a message 

내가 잘못하고있는 것에 대한 아이디어가 있습니까? 참고 : 나는 오류를 얻고있는 줄을 주석 처리했다.

+0

는'가령 getMail()가'null을 반환처럼 보이는, 당신이 당신의 데이터베이스 구조를 공유 할 수 있습니까? – Bill

+0

내 Log.i에서 볼 수 있듯이 올바른 사용자 데이터를 출력하고 전자 메일이 포함되어 있습니다. – Jamie22

+0

User 클래스는 데이터베이스 구조를 유지하기 위해 작성한 것입니다. – Jamie22

답변

3

얻을, 그래서 당신은 값을 얻기 전에 아이를 반복해야 할 수 있습니다.

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    if (dataSnapshot.exists()) { 
     for (DataSnapshot data : dataSnapshot.getChildren()) { 
      User currentUser = data.getValue(User.class); 
      Log.i("THE_SNAPSHOT_AS_STRIN", data.toString()); 
      Log.i("THE_USERS_EMAIL:::", currentUser.getEmail()); 
     } 
    } else { 
     // User does not exist at this point. 
    } 
} 

그리고 또한, 당신은 값이 클래스에 설정 될 수 있도록 User 클래스 세터를 만들어야합니다.

public void setEmail(String email) { 
    this.email = email; 
} 
public void setFirst_name(String first_name) { 
    this.first_name = first_name; 
} 
public void setLast_name(String last_name) { 
    this.last_name = last_name; 
} 
... 

희망이 도움이 :)

+0

근무 해 주셔서 감사합니다. – Jamie22

0

현재 사용자가 dataSnapshot이 차일을 가지고 있기 때문에 직접 getValue()를 호출 할 수 없습니다

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    if (user != null) { 
     userEmail = user.getEmail(); 
     userName = user.getDisplayName(); 
} 
+0

Firebase 사용자는 그 자체로 데이터를 얻으려고합니다. 위의 쿼리를 보면/users에 수동으로 작성하십시오. 위에 표시된 것과 같이 올바른 사용자를 로깅합니다. 클래스의 get 메소드를 호출 할 때 null을 반환합니다. – Jamie22

+0

Firebase DB의 스냅 샷을 업로드 할 수 있습니까? –

관련 문제