Android 尝试调用虚拟方法';void com.firebase.ui.database.FirebaseRecyclerAdapter.startListening();关于空对象引用
我正在创建我的第一个android studio应用程序,用户可以在其中发布日记条目。发布工作正常(上传到Firebase的实时数据库中),我现在正尝试使用recycler视图在主活动页面的卡片布局中显示这些帖子。遗憾的是,我在运行我的应用程序时遇到了这个错误。我会附上我的 MainActivity.javaAndroid 尝试调用虚拟方法';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
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)
布先生