【问题标题】:How to handle DatabaseException exception?如何处理 DatabaseException 异常?
【发布时间】:2020-11-24 08:53:48
【问题描述】:

主活动

public class MainActivity extends AppCompatActivity {

    RecyclerView mRecyclerView;
    FirebaseAdapter mAdapter;
    private static final String TAG = "MainActivity";

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

        mRecyclerView = (RecyclerView)findViewById(R.id.recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        FirebaseRecyclerOptions<DataClass> options = new FirebaseRecyclerOptions.Builder<DataClass>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("Users"), DataClass.class)
                .build();

        mAdapter = new FirebaseAdapter(options);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
    }
    @Override
    protected void onStart() {
        super.onStart();
        mAdapter.startListening();
    }
    @Override
    protected void onStop() {
        super.onStop();
        mAdapter.stopListening();
    }
}

适配器

public class FirebaseAdapter extends FirebaseRecyclerAdapter<DataClass,FirebaseAdapter.MyviewHolder> {
    private static final String TAG = "FirebaseAdapter";
    public FirebaseAdapter(@NonNull FirebaseRecyclerOptions<DataClass> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull MyviewHolder holder, int position, @NonNull DataClass model) {
        holder.name.setText(model.getName());
     holder.Nickname.setText(model.getNickname());
        Log.d(TAG, "onBindViewHolder: Now Bind method executing");
    }

    @NonNull
    @Override
    public MyviewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View v=  layoutInflater.inflate(R.layout.row_represent,parent,false);
        MyviewHolder v1 = new MyviewHolder(v);
        Log.d(TAG, "onCreateViewHolder: Now on create method executing");
        return v1;
    }

    public static class MyviewHolder extends RecyclerView.ViewHolder{
        TextView name;
       TextView Nickname;
        public MyviewHolder(@NonNull View itemView) {
            super(itemView);
            name = (TextView)itemView.findViewById(R.id.names);
            Nickname = (TextView) itemView.findViewById(R.id.nick);
        }
    }
}

类

public class DataClass {
      String name;
      String Nickname;

    public DataClass(){

    }

    public DataClass(String name, String Nickname) {
        this.name = name;
        this.Nickname= Nickname;
    }

    public String getName() {
        return name;
    }

    public String getNickname() {
        return Nickname;
    }
}

错误:

 2020-11-24 14:19:05.520 7304-7304/com.example.firebasesearchrec D/FirebaseAdapter: onCreateViewHolder: Now on create method executing
    2020-11-24 14:19:05.535 7304-7304/com.example.firebasesearchrec D/AndroidRuntime: Shutting down VM
    2020-11-24 14:19:05.547 7304-7304/com.example.firebasesearchrec E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.firebasesearchrec, PID: 7304
        com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.firebasesearchrec.DataClass
            at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:436)
            at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)

我得到数据库异常无法转换 java.lang 类型的对象有人可以帮助我解决这个问题....................... …………………………………………………………………………………………………… 谢谢................................................ ..................................................... ................................................

【问题讨论】:

  • stackoverflow.com/questions/62340676/…这个问题有你的答案!
  • 不,我不明白我应该怎么做才能清除这个错误
  • 请编辑您的问题并将您的数据库结构添加为 JSON 文件或至少是屏幕截图。请回复@AlexMamo
  • 现在检查一下 我已经添加了我的数据库,但不是 json 我希望你能理解它,因为它只有一个名字和一个昵称
  • 所有都是字符串 IDK 我怎么得到错误

标签: java android firebase android-recyclerview


【解决方案1】:

问题是你对db的查询结果返回String。您尝试读取该节点的子数据或数据与对象 DataClass 不匹配

【讨论】:

  • 我没明白,你能告诉我如何解决这个问题吗?我已经编辑了我的问题,我添加了我的数据库,它只是一个名字一个昵称
  • 你可以分享firebase db的屏幕截图,以便我们查看结构并在基础上给你答案。
  • 看看我已经分享过了
  • 两者都是字符串,我在自定义类中使用了字符串数据类型
  • 1. FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder() .setQuery(FirebaseDatabase.getInstance().getReference(), DataClass.class) .build(); 2. 在 DataClass > 将“N”大写名称设为 Name 以及 getter setter
【解决方案2】:

尝试调试 firebase 响应,因为我怀疑您的数据类型不同,应该是字符串

【讨论】:

    【解决方案3】:

    您正在尝试读取实际上是 DataClass 类型的 String 类型的数据,这是因为您收到此错误。您需要根据自己的要求更改代码。

    更多详情可以查看this link。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2013-08-02
      • 2019-04-25
      相关资源
      最近更新 更多