2017-10-15 3 views
0

내 앱에서 사용자를 my firebase database에 저장하고 있지만 객체의 값을 읽으려고하면 항상 null이 반환됩니다. 내 firebase의 규칙은 모두 사실로 설정되어 있으며 앱이 사용자를 올바르게 저장합니다. 왜 데이터를 읽을 수 없으며 항상 null을 반환하는지 알 수 없습니다.Firebase 데이터베이스에서 데이터를 가져 오는 중 null이 반환됩니다.

package com.example.leo_o.testfirebase; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.google.firebase.database.DataSnapshot; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.database.ValueEventListener; 

public class MainActivity extends AppCompatActivity implements 
View.OnClickListener { 

private Button saveButton; 
private EditText nameEditText; 
private DatabaseReference mDatabase; 

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

    mDatabase = FirebaseDatabase.getInstance().getReference("users"); 
    saveButton = (Button) findViewById(R.id.saveButton); 
    nameEditText = (EditText) findViewById(R.id.nameEditText); 
} 

private void saveUser(String name) { 
    User user = new User(name); 
    String userId = mDatabase.push().getKey(); 
    mDatabase.child(userId).setValue(user); 
} 

public void getData() { 
    ValueEventListener userListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      User user = dataSnapshot.getValue(User.class); 
      String name = user.getName(); 
      if (name == null) { 
       Toast.makeText(MainActivity.this, "Null value", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }; 
    mDatabase.addValueEventListener(userListener); 
} 

@Override 
public void onClick(View view) { 
    if (view == saveButton) { 
     String name = nameEditText.getText().toString(); 
     saveUser(name); 
     getData(); 
    } 
} 

}이 내 사용자 클래스

입니다 :

package com.example.leo_o.testfirebase; 

public class User { 

public String name; 

public User() { 
} 

public User(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

}

사람이 내 코드에 어떤 문제가 있는지 알고 있나요은 왜 항상이 내 MainActivity 클래스입니다 null를 돌려 주는가?

답변

0

mbase가 firebase의 "users"노드를 가리 키므로 "onDataChange"에있는 값은 단일 사용자가 아닌 사용자 목록입니다.

는 값을 설정하는 방법을 참조하십시오 : mDatabase.child (userId를) .setValue()를

그냥 단일 사용자의 세부 사항을 얻으려면 당신은 동일한 작업을 수행해야합니다. 값 이벤트를 userId 노드에 연결하십시오.

또는 mDatabase에서 자식 이벤트 수신기를 사용할 수도 있습니다.

관련 문제