Android 数据库异常:Can';t将java.lang.String类型的对象转换为com.mscit\u lab\u 16.school\u management.Message类型

Android 数据库异常:Can';t将java.lang.String类型的对象转换为com.mscit\u lab\u 16.school\u management.Message类型,android,firebase,Android,Firebase,我面临以下错误 com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为com.mscit\u lab\u 16.school\u management.Message类型 我有一个问题 m、 setMsg(ds.getValue(Message.class.getMsg()) 帮我解决这个错误 有一个消息类 package com.mscit_lab_16.school_management; imp

我面临以下错误

com.google.firebase.database.DatabaseException:无法将java.lang.String类型的对象转换为com.mscit\u lab\u 16.school\u management.Message类型

我有一个问题

m、 setMsg(ds.getValue(Message.class.getMsg())

帮我解决这个错误

有一个消息类

package com.mscit_lab_16.school_management;

import android.support.annotation.Keep;

import com.google.firebase.database.Exclude;

/**
* Created by PC PLANET on 12/05/2018.
*/
//@JsonIgnoreProperties(ignoreUnknown = true)
@Keep
public class Message {

public String msg;

public Message() {
}

@Keep
public String getMsg() {
    return msg;
}

@Keep
public void setMsg(String msg) {
    this.msg = msg;
}
}
Cont_admin.java

package com.mscit_lab_16.school_management;

import android.app.Dialog;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.firebase.client.Firebase;
import com.google.firebase.FirebaseApp;
import com.google.firebase.database.ChildEventListener;
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.internal.FirebaseAppHelper;
import android.database.Cursor;

import java.util.ArrayList;

public class Cont_Admin extends AppCompatActivity {

EditText msgText;
Button sendBtn;
ArrayList<Message> msgs=new ArrayList<Message>();
RecyclerView rv;
MyAdapter adapter;
DatabaseReference databaseReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cont__admin);
    Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);

    rv=findViewById(R.id.mRecyclerID);
    rv.setLayoutManager(new LinearLayoutManager(this));

    databaseReference= FirebaseDatabase.getInstance().getReference("admin_messages");

    Firebase.setAndroidContext(this);

    //REFERENCE
   this.refreshData();
}

public void sendMesssage_admin(View view) {
    displayDialog();
}

private void displayDialog(){
    Dialog d=new Dialog(this);
    d.setTitle("Send Message");
    d.setContentView(R.layout.dialoglayout);

    msgText=d.findViewById(R.id.nameEditText);
    sendBtn=d.findViewById(R.id.sendBtn);

    d.show();
}

public void sendMsg(View view) {
    sendMessage(msgText.getText().toString().trim());
    msgText.setText("");
    refreshData();
}

//send msg to firebase database
private void sendMessage(String message){

    Message m=new Message();
    m.setMsg(message);
    databaseReference.push().setValue(m);
}

//retrieve msg from firebase database
private void refreshData(){

    databaseReference.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            getUpdates(dataSnapshot);
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            getUpdates(dataSnapshot);
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

private void getUpdates(DataSnapshot dataSnapshot){
    msgs.clear();

    for (DataSnapshot ds:dataSnapshot.getChildren()){
        Message m=new Message();
        m.setMsg(ds.getValue(Message.class).getMsg());
        msgs.add(m);
    }

    if (msgs.size()>0){
        adapter=new MyAdapter(Cont_Admin.this,msgs);
        rv.setAdapter(adapter);
    }else {
        Toast.makeText(Cont_Admin.this,"No data",Toast.LENGTH_SHORT).show();
    }
}
package com.mscit\u lab\u 16.学校管理;
导入android.app.Dialog;
导入android.support.design.widget.FloatingActionButton;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.support.v7.widget.Toolbar;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入com.firebase.client.firebase;
导入com.google.firebase.FirebaseApp;
导入com.google.firebase.database.ChildEventListener;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入com.google.firebase.internal.FirebaseAppHelper;
导入android.database.Cursor;
导入java.util.ArrayList;
公共类Cont_Admin扩展AppCompative活动{
编辑文本msgText;
按钮sendBtn;
ArrayList msgs=新的ArrayList();
回收视图rv;
MyAdapter适配器;
数据库参考数据库参考;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u cont\u admin);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
rv=findViewById(R.id.mRecyclerID);
rv.setLayoutManager(新直线布局经理(本));
databaseReference=FirebaseDatabase.getInstance().getReference(“管理消息”);
Firebase.setAndroidContext(this);
//参考文献
这是refreshData();
}
公共无效SendMessage_管理员(视图){
显示对话框();
}
私有void显示对话框(){
对话框d=新对话框(此对话框);
d、 setTitle(“发送消息”);
d、 setContentView(R.layout.dialoglayout);
msgText=d.findviewbyd(R.id.nameEditText);
sendBtn=d.findviewbyd(R.id.sendBtn);
d、 show();
}
公共void sendMsg(视图){
sendMessage(msgText.getText().toString().trim());
msgText.setText(“”);
刷新数据();
}
//向firebase数据库发送消息
私有void发送消息(字符串消息){
消息m=新消息();
m、 setMsg(消息);
databaseReference.push().setValue(m);
}
//从firebase数据库检索msg
私有数据(){
databaseReference.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
获取更新(dataSnapshot);
}
@凌驾
公共void onChildChanged(DataSnapshot DataSnapshot,字符串s){
获取更新(dataSnapshot);
}
@凌驾
ChildRemoved上的公共void(DataSnapshot DataSnapshot){
}
@凌驾
已移动ChildMoved上的公共void(DataSnapshot DataSnapshot,字符串s){
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
私有void getUpdates(DataSnapshot DataSnapshot){
msgs.clear();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
消息m=新消息();
m、 setMsg(ds.getValue(Message.class.getMsg());
增加(m);
}
如果(msgs.size()>0){
adapter=新的MyAdapter(Cont_Admin.this,msgs);
rv.设置适配器(适配器);
}否则{
Toast.makeText(Cont_Admin.this,“无数据”,Toast.LENGTH_SHORT.show();
}
}
}

此部分有问题dataSnapshot已经是“admin_messages”的子节点,因此它是由
push()
方法推送的节点。dataSnapshot只有一个子项,这是一个键为
msg
的字符串,因此;不需要循环其子项。
因此,将其移除并保持如下状态:

Message m = dataSnapshot.getValue(Message.class);
msgs.add(m);

请添加您的数据库结构。
Message m = dataSnapshot.getValue(Message.class);
msgs.add(m);