【问题标题】:Error - com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.project_sewing.Event1 [duplicate]错误 - com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.example.project_sewing.Event1 类型 [重复]
【发布时间】:2020-01-27 18:10:44
【问题描述】:

我收到此错误 - “com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.example.project_sewing.Event1 类型的对象”在粗体标题上。 我创建了一个用于队列管理的应用程序,我有一个字符串映射(电话号码)和所有事件的 ArrayList。

        myRef.addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                 for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                        String key = childSnapshot.getKey();
                        if(key.equals("clients")) {
                            allEvents = childSnapshot.getValue(AllEvents.class);
                        } else if(key.equals("manager")) {
                            manager = childSnapshot.getValue(Manager.class);
                        }
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError error) {
            }
        });

这里是 Event1:

public class Event1 {
    private String number,type,messages,hour;
    private int price,day,year,month,status;

    public Event1(String number, String type, int price, int day, int month, int year, String hour,int status, String messages) {}


    public String getNumber() {
        return number;
    }

    public Event1(){}

    public void setMessages(Event1 event) {
        this.messages = "The event:" + event+ " is cancel";
    }

    public int calculationCost(){ }

      @Override
    public String toString() {}
}

这里是所有事件:

public class AllEvents {
    private Map<String, ArrayList<Event1>> data;

    public Map<String,ArrayList<Event1>> getData() {
        return data;
    }

    public AllEvents() {
         data = new HashMap<String, ArrayList<Event1>>();
    }

    public void setData(Map<String,ArrayList<Event1>> data) {

        this.data = data;
    }
    public void addToList(String mapKey,Event1 event){
        ArrayList<Event1> itemsList = data.get(mapKey);
        if(itemsList == null) {
            itemsList = new ArrayList<Event1>();
            itemsList.add(event);
            data.put(mapKey, itemsList);
        } else
            if(!itemsList.contains(event)) itemsList.add(event);
    }
    public AllEvents(Map<String,ArrayList<Event1>> map) {
        if(this.data == null)
            data = new HashMap<String,ArrayList<Event1>>();
        else
            this.data = map;
    }

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public boolean isExist(Event1 e)
    {
        if(!data.containsKey(e.getNumber()))
            return false;
        ArrayList<Event1> elist =  data.get(e.getNumber());
        for (Event1 eitem: elist) {
            if(eitem.equals(e))
                return true;
        }
        return false;
    }
}

【问题讨论】:

  • 实际上你的dataSnapshot返回字符串而不是AllEvents。你能添加你的数据库结构吗?同时添加myRef的详细信息
  • 当然,i.stack.imgur.com/Q8ACf.png@Md。阿萨杜扎曼 3
  • 可以加myRefAllEvents型号吗?
  • @Md.Asaduzzaman 我添加了:)

标签: java android firebase android-studio compiler-errors


【解决方案1】:

根据您的 数据库 结构,您将获得多个 children 从您的 queryfirebase。你必须像下面这样处理:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

    for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {

        String key = childSnapshot.getKey();

        if(key.equals("clients")) {
            allEvents = childSnapshot.getValue(AllEvents.class);
        } else if(key.equals("manager")) {
            manager = childSnapshot.getValue(Manager.class);
        }
    }
}

同时更改您的Event1,如下所示:

public class Event1 {
    private String number,type,messages,hour;
    private int price,day,year,month,status;

    public Event1(String number, String type, int price, int day, int month, int year, String hour,int status, String messages) {}


    public String getNumber() {
        return number;
    }

    public Event1(){}

    public int calculationCost(){ }

    @Override
    public String toString() {}
}

【讨论】:

  • 我从这个数据库结构中得到一个空值
  • 现在我得到了这个数据库结构:message->clients->data->data。当我尝试从 firebase 读取数据时,它不起作用。 @Md。阿萨杜扎曼
  • 我创建了一个用于队列管理的应用程序,我有一个字符串映射(电话号码)和所有事件的 ArrayList
  • 能否添加AllEventsEvent1的完整代码?
  • 我添加了完整的代码,谢谢! @Md. Asaduzzaman
猜你喜欢
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2020-08-17
  • 2021-05-02
  • 2018-04-09
  • 2020-09-23
  • 1970-01-01
相关资源
最近更新 更多