2017-10-15 15 views
0

私のアプリはmy firebase databaseにユーザーを保存していますが、オブジェクトの値を読み取ろうとすると常にnullが返されます。私のfirebaseのルールはすべてtrueに設定されており、アプリはユーザーを適切に保存しています。私はなぜデータを読み取ることができないのか、なぜそれが常に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(); 
    } 
} 

}これが私のUserクラス

アンです:

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

あなたのmDatabaseがfirebaseの "users"ノードを指しているので、 "onDataChange"に入っている値は単一のユーザではなく、ユーザのリストです。

は、あなたが値を設定する方法を参照してください:mDatabase.child(USERID).setValue()

あなただけの単一のユーザーの詳細情報を取得したい場合は、同じことを行う必要があります。 valueイベントをuserIdノードにアタッチします。

また、mDatabaseで子イベントリスナーを使用することもできます。

関連する問題