Android 按下RecyclerView中的后退按钮前未显示firebase数据
我正在使用firebase实时数据库。。我检索了数据和所有内容,但我的主要问题是,除非我按下后退按钮,否则数据不会显示。。我浏览了它建议通知DataSetChanged()的所有堆栈;我以前也这么做过,但还是不走运。由于我使用的是GridLayout,我无法在AddListeneOnDatchange函数中使用适配器,因为它显示了一个错误,即不允许在此处为我的RecycleServiceAdapter添加适配器Android 按下RecyclerView中的后退按钮前未显示firebase数据,android,firebase-realtime-database,android-recyclerview,Android,Firebase Realtime Database,Android Recyclerview,我正在使用firebase实时数据库。。我检索了数据和所有内容,但我的主要问题是,除非我按下后退按钮,否则数据不会显示。。我浏览了它建议通知DataSetChanged()的所有堆栈;我以前也这么做过,但还是不走运。由于我使用的是GridLayout,我无法在AddListeneOnDatchange函数中使用适配器,因为它显示了一个错误,即不允许在此处为我的RecycleServiceAdapter添加适配器 package my.unimas.a50200siswa.studenta
package my.unimas.a50200siswa.studentattendancemonitoringsystem;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
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;
import java.util.ArrayList;
import java.util.List;
public class HomeActivity extends AppCompatActivity {
String userID;
List<CourseModel> listCourse;
TextView btnSignOut, UserName;
/*---- Firebase Database stuff ----*/
FirebaseAuth mAuth;
FirebaseUser user;
FirebaseAuth.AuthStateListener mAuthListener;
DatabaseReference myRef;
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
/*-------Finding View---------*/
btnSignOut = (TextView) findViewById(R.id.btnsignout_home);
UserName = findViewById(R.id.username);
RecyclerView myrv = findViewById(R.id.recyclerviewcourse);
myrv.setLayoutManager(new GridLayoutManager(this,2));
// CourseCode();
btnSignOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAuth.signOut();
}
});
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if (firebaseAuth.getCurrentUser() == null) {
startActivity(new Intent(HomeActivity.this, SignInActivity.class));
}
}
};
/* ----------------- Firebase Elements -----------------*/
mAuth = FirebaseAuth.getInstance();
user = mAuth.getCurrentUser();
userID = user.getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
myRef = rootRef.child("Users");
/*------------------------------------------------------------------*/
listCourse = new ArrayList<>();
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userName = dataSnapshot.child(userID).child("userName").getValue(String.class);
UserName.setText(userName);
String coursecode[] = new String[10];
String coursename[] = new String[10];
listCourse.clear();
if (dataSnapshot.exists()) {
int i = 1;
for (DataSnapshot dataSnapshot1 : dataSnapshot.child(userID).child("Course").getChildren()) {
coursecode[i]= dataSnapshot1.getKey();
coursename[i]=dataSnapshot.child(userID).child("Course").child(coursecode[i]).child("CourseName").getValue(String.class);
listCourse.add(new CourseModel(userID,coursecode[i],coursename[i]));
i++;
}
}
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w("Hello", "Failed to read value.", error.toException());
}
});
RecyclerViewAdapterCourse myAdapter = new RecyclerViewAdapterCourse(this,listCourse);
myAdapter.notifyDataSetChanged();
myrv.setAdapter(myAdapter);
}
}
包my.unimas.a50200siswa.studentattendencemonitoringsystem;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.GridLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.view;
导入android.widget.TextView;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.database.ValueEventListener;
导入java.util.ArrayList;
导入java.util.List;
公共类HomeActivity扩展了AppCompatActivity{
字符串用户标识;
列出课程清单;
TextView btnSignOut,用户名;
/*----Firebase数据库的东西----*/
FirebaseAuth mAuth;
FirebaseUser用户;
FirebaseAuth.AuthStateListener mAuthListener;
数据库参考myRef;
@凌驾
受保护的void onStart(){
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
@凌驾
公共void onStop(){
super.onStop();
if(mAuthListener!=null){
removeAuthStateListener(mAuthListener);
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
/*-------查找视图---------*/
btnSignOut=(TextView)findViewById(R.id.btnSignOut_home);
UserName=findviewbyd(R.id.UserName);
RecyclerView myrv=findViewById(R.id.recyclerviewcourse);
myrv.setLayoutManager(新GridLayoutManager(this,2));
//CourseCode();
btnSignOut.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mAuth.signOut();
}
});
mAuthListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
如果(firebaseAuth.getCurrentUser()==null){
startActivity(新意图(HomeActivity.this,SignInActivity.class));
}
}
};
/*---------火基元素-----------------*/
mAuth=FirebaseAuth.getInstance();
user=mAuth.getCurrentUser();
userID=user.getUid();
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
myRef=rootRef.child(“用户”);
/*------------------------------------------------------------------*/
listCourse=新的ArrayList();
myRef.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
字符串userName=dataSnapshot.child(userID).child(“用户名”).getValue(String.class);
UserName.setText(用户名);
字符串coursecode[]=新字符串[10];
字符串coursename[]=新字符串[10];
listCourse.clear();
if(dataSnapshot.exists()){
int i=1;
for(DataSnapshot dataSnapshot1:DataSnapshot.child(userID.child(“课程”).getChildren()){
coursecode[i]=dataSnapshot1.getKey();
coursename[i]=dataSnapshot.child(userID).child(“课程”).child(coursecode[i]).child(“coursename”).getValue(String.class);
添加(新的CourseModel(userID,coursecode[i],coursename[i]);
i++;
}
}
}
@凌驾
已取消的公共无效(DatabaseError错误){
//无法读取值
Log.w(“Hello”,“读取值失败”,error.toException());
}
});
RecycleServiceAdapterCourse myAdapter=新的RecycleServiceAdapterCourse(此,listCourse);
myAdapter.notifyDataSetChanged();
myrv.setAdapter(myAdapter);
}
}
每次数据更改时都需要调用myAdapter.notifyDataSetChanged()
。在您的情况下,这意味着您需要在onDataChanged(DataSnapShot DataSnapShot)
函数末尾调用它
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userName = dataSnapshot.child(userID).child("userName").getValue(String.class);
UserName.setText(userName);
String coursecode[] = new String[10];
String coursename[] = new String[10];
listCourse.clear();
if (dataSnapshot.exists()) {
int i = 1;
for (DataSnapshot dataSnapshot1 : dataSnapshot.child(userID).child("Course").getChildren()) {
coursecode[i]= dataSnapshot1.getKey();
coursename[i]=dataSnapshot.child(userID).child("Course").child(coursecode[i]).child("CourseName").getValue(String.class);
listCourse.add(new CourseModel(userID,coursecode[i],coursename[i]));
i++;
}
}
myAdapter.notifyDataSetChanged()
}
嘿虽然我以前尝试过,但由于我在类中声明了recyclerview并使其成为最终版本,所以它没有起作用。。但在你再次指出后,我只是在全球范围内宣布了它,然后它就像一个符咒。。哈哈。。非常感谢。