我对 Java 相当陌生,在解决收到的异常时遇到了困难。
首先,这是一个异常(exception):
Exception in thread "FirebaseEventTarget" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
at CallServer$1.onDataChange(CallServer.java:30)
at com.firebase.client.core.ValueListenerContainer$1.run(ValueListenerContainer.java:47)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
这是代码。
public class CallServer {
public void displayNameWeight(int adress){
// x = card name, displays card name and weight
String url = "https://dominion-randomizer.firebaseio.com/Set/Base/"
+ adress ;
Firebase referenceCard = new Firebase(url);
referenceCard.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snap) {
Object value = snap.getValue();
/*Line 30*/ String name = (String) ((Map) value).get("name");
Long weight = (Long)((Map)value).get("weight");
System.out.println(name + "'s weight is:" + weight);
}
@Override
public void onCancelled(FirebaseError arg) {
System.err.println("oops");
}
});
}
public void writeWeight(int adress, int weight) {
String url = "https://dominion-randomizer.firebaseio.com/Set/Base/"
+ adress;
Firebase referenceCard = new Firebase(url);
System.out.println("Card ID:" + adress);
referenceCard.child("weight").setValue(weight);
}
所以我的问题是,当我使用 displayNameWeight 方法时,它可以正常运行,但是当我尝试将 writeWeight 与 displayNameWeight 结合使用时,我收到 java.lang.ClassCastException。我知道我不能将不同类型的对象组合在一起,但是我不明白为什么第一个方法可以正确运行,而第二个方法却不能。我唯一能想到的是,当我引用 Firebase url 时,对象类型以某种方式发生了变化。
很抱歉我的问题不一定连贯,我对编程很陌生。 编辑:显示第 30 行
最佳答案
不要在将其从 map 中拉出时施放重量,而是尝试将其作为对象拉出,然后检查它是什么类型。
或者,您可以执行以下操作,而不是将整个快照转换为 map :
Long weight = snap.child("weight").getValue(Long.class);
这可能更容易阅读。一般来说,我会说看一下 DataSnapshot 的文档,有几种实用方法可以使其更容易使用,而不是没有指定键和值类型的 Map:https://www.firebase.com/docs/java-api/javadoc/com/firebase/client/DataSnapshot.html
关于引用 Firebase 时抛出 Java java.lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20306235/