Android 尝试调用虚拟方法';void com.firebase.ui.database.FirebaseRecyclerAdapter.startListening();关于空对象引用

Android 尝试调用虚拟方法';void com.firebase.ui.database.FirebaseRecyclerAdapter.startListening();关于空对象引用,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在创建我的第一个android studio应用程序,用户可以在其中发布日记条目。发布工作正常(上传到Firebase的实时数据库中),我现在正尝试使用recycler视图在主活动页面的卡片布局中显示这些帖子。遗憾的是,我在运行我的应用程序时遇到了这个错误。我会附上我的 MainActivity.java public class MainActivity extends AppCompatActivity { private RecyclerView mDiaryList; privat

我正在创建我的第一个android studio应用程序,用户可以在其中发布日记条目。发布工作正常(上传到Firebase的实时数据库中),我现在正尝试使用recycler视图在主活动页面的卡片布局中显示这些帖子。遗憾的是,我在运行我的应用程序时遇到了这个错误。我会附上我的

MainActivity.java

public class MainActivity extends AppCompatActivity {

private RecyclerView mDiaryList;
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private FirebaseRecyclerAdapter<Journal, JournalViewHolder> adapter;

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

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Journal");

    mDiaryList = (RecyclerView) findViewById(R.id.diary_list);
    mDiaryList.setLayoutManager(new LinearLayoutManager(this));
    mDiaryList.setHasFixedSize(true);


    mDatabase = FirebaseDatabase.getInstance().getReference().child("Journal");

    DatabaseReference personRef = FirebaseDatabase.getInstance().getReference().child("Journal");
    Query query = personRef.orderByKey();

    mDatabase.keepSynced(true);
    FirebaseRecyclerOptions<Journal> options =
            new FirebaseRecyclerOptions.Builder<Journal>()
                    .setQuery(query, Journal.class)
                    .build();


    FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Journal, JournalViewHolder>(options) {
        @NonNull
        @Override
        public JournalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.diary_list, parent, true);

            return new JournalViewHolder(view);
        }

        //
        @Override
        protected void onBindViewHolder(@NonNull JournalViewHolder holder, int position, @NonNull Journal model) {

            final String post_key = getRef(position).getKey().toString();
            holder.setTitle(model.getTitle());
            holder.setDesc(model.getDesc());

        }
    };
    mDiaryList.setAdapter(adapter);

}


@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

//we need a viewholder to set up the Recycler  view.
public static class JournalViewHolder extends RecyclerView.ViewHolder {
    View mView;

    public JournalViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setTitle(String title) {
        TextView post_title = mView.findViewById(R.id.post_title);
        post_title.setText(title);
    }

    public void setDesc(String desc) {
        TextView post_desc = mView.findViewById(R.id.post_desc);
        post_desc.setText(desc);
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.options:
            // Red item was selected
            startActivity(new Intent(MainActivity.this, ProfileActivity.class));
            return true;

        case R.id.add_post:
            //add_post was selected
            startActivity(new Intent(MainActivity.this, PostActivity.class));
        default:
            return super.onOptionsItemSelected(item);
    }
}
public class Journal {
private String title, desc, uid;
public Journal(String title, String desc, String uid) {
    this.title = title;
    this.desc = desc;
    this.uid = uid;
}
public Journal() {
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

您正在onCreate中本地定义一个名为
adapter
的变量,该变量在类级别隐藏成员变量
adapter
。应将类型从其赋值中删除,以确保将其赋值给成员变量而不是局部变量:

// Remove "FirebaseRecyclerAdapter" from this line.
adapter = new FirebaseRecyclerAdapter<>(options) ...
//从此行中删除“FirebaseRecyclerAdapter”。
适配器=新的FirebaseRecyclerAdapter(选项)。。。

您正在onCreate中本地定义一个名为
adapter
的变量,该变量在类级别上隐藏成员变量
adapter
。应将类型从其赋值中删除,以确保将其赋值给成员变量而不是局部变量:

// Remove "FirebaseRecyclerAdapter" from this line.
adapter = new FirebaseRecyclerAdapter<>(options) ...
//从此行中删除“FirebaseRecyclerAdapter”。
适配器=新的FirebaseRecyclerAdapter(选项)。。。
公共类MainActivity扩展了AppCompatActivity{
私人回收站查看MDARYLIST;
私有数据库参考数据库;
私人消防队;
私有FirebaseAuth.AuthStateListener mAuthListener;
专用FirebaseRecyclerAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatabase=FirebaseDatabase.getInstance().getReference().child(“日志”);
MDARYLIST=(RecyclerView)findViewById(R.id.Dialog\U列表);
setLayoutManager(新的LinearLayoutManager(this));
mdarylist.setHasFixedSize(true);
//这是不必要的。
mDatabase=FirebaseDatabase.getInstance().getReference().child(“日志”);
//我认为这也是不必要的。您已经有了一个声明为局部变量的DatabaseReference对象。
DatabaseReference personRef=FirebaseDatabase.getInstance().getReference().child(“日志”);
//将此行更改为Query Query=mDatabase.orderByKey();
Query Query=personRef.orderByKey();
mDatabase.keepSynced(true);
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,Journal.class)
.build();
//在这里实例化适配器
适配器=新的FirebaseRecyclerAdapter(选项){
@非空
@凌驾
public JournalViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View=LayoutInflater.from(parent.getContext())
.充气(R.layout.Daily_列表,父项,真实);
返回新的日志文件夹(视图);
}
//
@凌驾
受保护的无效onBindViewHolder(@NonNull JournalViewHolder,int位置,@NonNull Journal模型){
最后一个字符串post_key=getRef(位置).getKey().toString();
setTitle(model.getTitle());
holder.setDesc(model.getDesc());
}
};
mdarylist.setAdapter(适配器);
}
@凌驾
受保护的void onStart(){
super.onStart();
adapter.startListening();
}
@凌驾
受保护的void onStop(){
super.onStop();
adapter.stopListening();
}
//我们需要一个视图持有者来设置回收器视图。
公共静态类JournalViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共日志文件夹(查看项目视图){
超级(项目视图);
mView=项目视图;
}
公共无效集合标题(字符串标题){
TextView post_title=mView.findviewbyd(R.id.post_title);
post_title.setText(title);
}
公共void setDesc(字符串desc){
TextView post_desc=mView.findviewbyd(R.id.post_desc);
后描述设置文本(描述);
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.menu,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.选项:
//已选择红色项目
startActivity(新意图(MainActivity.this、ProfileActivity.class));
返回true;
案例R.id.add_post:
//已选择添加帖子
startActivity(新意图(MainActivity.this、PostActivity.class));
违约:
返回super.onOptionsItemSelected(项目);
}
}
公共类MainActivity扩展了AppCompatActivity{
私人回收站查看MDARYLIST;
私有数据库参考数据库;
私人消防队;
私有FirebaseAuth.AuthStateListener mAuthListener;
专用FirebaseRecyclerAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatabase=FirebaseDatabase.getInstance().getReference().child(“日志”);
MDARYLIST=(RecyclerView)findViewById(R.id.Dialog\U列表);
setLayoutManager(新的LinearLayoutManager(this));
mdarylist.setHasFixedSize(true);
//这是不必要的。
mDatabase=FirebaseDatabase.getInstance().getReference().child(“日志”);
//我认为这也是不必要的。您已经有了一个声明为局部变量的DatabaseReference对象。
DatabaseReference personRef=FirebaseDatabase.getInstance().getReference().child(“日志”);
//将此行更改为Query Query=mDatabase.orderByKey();
Query Query=personRef.orderByKey();
mDatabase.keepSynced(true);
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,Journal.class)
布先生