기본적으로 내 문제는 firebase db에 여러 속성을 가진 사용자 목록을 저장했다는 것입니다. 그 중 일부는 개인 정보이므로 일부 항목에 대한 액세스를 거부하려고했습니다. 규칙은 필터로 사용할 수 없기 때문에 답변이 아닙니다.android의 고급 firebase 어댑터
내 솔루션은 "사용자"에 대해 "pvt"(개인) 및 "pb"(공개)의 두 가지 새로운 속성을 만들고 그 내부에 올바른 속성을 저장하는 것이 었습니다.
내가 먼저 사용 새 사용자를 만들려면 : newUserPublic 및 newUserPrivate 사용자의 특성 (공공 다른 하나는 개인 정보에 대한 기타)에 대한 getter와 setter를 제공하고 간단한 사용자 정의 클래스의 객체mDatabase.child("users").child(prefs.getString("id firebase", " ")).child("public").setValue(newUserPublic);
mDatabase.child("users").child(prefs.getString("id firebase", " ")).child("private").setValue(newUserPrivate);
.
최종 목표는 각 사용자의 공용 속성 만 사용하는 리더 보드를 만드는 것이지만이 구성으로 적절한 ListAdapter를 만들지 못했습니다.
내 마지막 시도가 사용자
public class User {
public UserDataPrivate getPvt() {
return pvt;
}
public void setPvt(UserDataPrivate pvt) {
this.pvt = pvt;
}
public UserDataPublic getPb() {
return pb;
}
public void setPb(UserDataPublic pb) {
this.pb = pb;
}
private UserDataPrivate pvt;
private UserDataPublic pb;
public void setId(String id) {
this.id = id;
}
private String id;
public User(String id, UserDataPublic pb, UserDataPrivate pvt){
this.pvt=pvt;
this.pb=pb;
this.id=id;
}
}
가 새로운 사용자를 만들라고하는 새로운 클래스를 만드는 것이 었습니다 :
User user = new User(newUserPublic, newUserPrivate);
mDatabase.child("users").child(prefs.getString("id firebase", " ")).setValue(user);
현재 어댑터를
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users");
Query query = mDatabase.child("pb").orderByChild("points");
ListAdapter adapter = new CustomFirebaseAdapter<User>(this, User.class, R.layout.list_item, query) {
@Override
protected void populateView(View v, User model, int position) {
//code that uses model.getPb()
}
};
입니다
작동하지 않습니다 (// 코드는 실행되지 않습니다).
어떻게 해결할 수 있습니까?
편집 : 쿼리 내부 사용자 PB/점수를 시도하지만 충돌
이
는 중포 기지에서 테스트 사용자입니다. 문제는 firebase가 복잡한 객체를 처리 할 수 없다거나 뭔가를 놓치고 있다는 것입니다. 사용하는 단일 사용자 데이터를 검색하는 다른 코드 부분이 있습니다.final DatabaseReference userDatabase = mDatabase.child("users").child(prefs.getString("id firebase", " "));
userDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
//...
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
사용자를 설정할 때 충돌이 발생합니다. 사용자 개체를 사용하여 db에 사용자를 저장하면 같은 방식으로 검색 할 수 있다고 생각했지만 틀렸을 것입니다.
응용 프로그램이 충돌합니다! 나는 firebase가 복잡한 객체를 다룰 수 없다고 생각합니다. 첫 번째 게시물을 수정하여 코드 –
을 게시합니다. 충돌이 발생하면 게시글에 stacktrace의 logcat을 포함하십시오. –
당신이 나를 구 했어요! 사용자 클래스에 dataSnapshopt.getValue()가 필요하지 않다는 이유로 데이터가없는 매개 변수가있는 생성자가 없습니다. 이제 작동 중입니다. –