Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按下RecyclerView中的后退按钮前未显示firebase数据_Android_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Android 按下RecyclerView中的后退按钮前未显示firebase数据

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

我正在使用firebase实时数据库。。我检索了数据和所有内容,但我的主要问题是,除非我按下后退按钮,否则数据不会显示。。我浏览了它建议通知DataSetChanged()的所有堆栈;我以前也这么做过,但还是不走运。由于我使用的是GridLayout,我无法在AddListeneOnDatchange函数中使用适配器,因为它显示了一个错误,即不允许在此处为我的RecycleServiceAdapter添加适配器

    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并使其成为最终版本,所以它没有起作用。。但在你再次指出后,我只是在全球范围内宣布了它,然后它就像一个符咒。。哈哈。。非常感谢。