首页 > 解决方案 > com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.example.root.minimt.HomeworkModel 类型

问题描述

进入课堂作业后立即退出应用程序,“logcat”显示错误“无法将 java.lang.String 类型的对象转换为 com.example.root.minimt.HomeworkModel 类型”,我找不到是什么问题,请帮助我。显然给出了一个错误,因为我错误地定义了变量的类型,问题是什么

作业.java

public class homework extends AppCompatActivity {

    private RecyclerView recyclerView;
    private List<HomeworkModel> result;
    private HomeworkAdapter adapter;

    private FirebaseDatabase database;
    private DatabaseReference reference;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homework);
    getSupportActionBar().setTitle("домашнее задание");
    database = FirebaseDatabase.getInstance();
    reference = database.getReference("homework");

    result = new ArrayList<>();

    recyclerView = findViewById(R.id.homework_list);
    recyclerView.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);

    recyclerView.setLayoutManager(llm);



    adapter = new HomeworkAdapter(result);
    recyclerView.setAdapter(adapter);


    updateList();




}


@Override
public boolean onContextItemSelected(MenuItem item){

    switch (item.getItemId()){
        case 0:
            break;
        case 1:
            break;
    }

    return super.onContextItemSelected(item);
}




private void updateList(){

    reference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            result.add(dataSnapshot.getValue(HomeworkModel.class));
            adapter.notifyDataSetChanged();

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            HomeworkModel model = dataSnapshot.getValue(HomeworkModel.class);
            int index = getItemIndex(model);
            result.set(index, model);
            adapter.notifyItemChanged(index);

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
            HomeworkModel model = dataSnapshot.getValue(HomeworkModel.class);
            int index = getItemIndex(model);
            result.remove(index);
            adapter.notifyItemRemoved(index);

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
private int getItemIndex(HomeworkModel homework){
    int index = -1;
    for(int i= 0; i < result.size(); i++ ){
        if (result.get(i).key.equals(homework.key)) {
            index = 1;
            break;
        }
    }
    return  index;
}
}

作业模型.java

public class HomeworkModel {

String name, homework, key;

public String getKey() {
    return key;
}

public void setKey(String key) {
    this.key = key;
}

public HomeworkModel(){


}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getHomework() {
    return homework;
}

public void setHomework(String homework) {
    this.homework = homework;
}

public HomeworkModel(String name, String homework, String key) {
    this.name = name;
    this.homework = homework;
    this.key = key;
}
}

作业适配器.java

public class HomeworkAdapter extends  RecyclerView.Adapter<HomeworkAdapter.HomeworkViewHolder> {

private List<HomeworkModel>  list;

public HomeworkAdapter(List<HomeworkModel> list) {
    this.list = list;
}

@Override
public HomeworkViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
    return new HomeworkViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item, parent, false));
}

@Override
public void onBindViewHolder(final HomeworkViewHolder holder, int position) {

    HomeworkModel homework = list.get(position);

    holder.textName.setText(homework.name);
    holder.textHomework.setText(homework.homework);
    holder.itemView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            menu.add(holder.getAdapterPosition(), 0, 0, "Удалить");
            menu.add(holder.getAdapterPosition(), 1, 0, "Изменить");
        }
    });




}

@Override
public int getItemCount() {
    return list.size();
}

class HomeworkViewHolder extends RecyclerView.ViewHolder {

    TextView textName, textHomework;



    public HomeworkViewHolder(View itemView) {
        super(itemView);

        textName = itemView.findViewById(R.id.text_name);
        textHomework = itemView.findViewById(R.id.text_homework);
    }
}

}

数据库结构.json{ "homework" : { "rassian" : { "homework" : "C.73 №253", "name" : "русский язык" } } }

标签: javaandroidfirebasefirebase-realtime-database

解决方案


推荐阅读