【问题标题】:Android Firebase Exception "Could not resolve type T"Android Firebase 异常“无法解析类型 T”
【发布时间】:2017-09-23 00:06:49
【问题描述】:

你有一个抽象的通用类“ArticleOrdered”和一个子类“DrinkOrdered”(参见下面的类声明代码)。如果我创建了一个 DrinkOrdered 对象并将其保存在 Firebase 中,我没有问题。 当我尝试执行时:

DrinkOrdered test = dataSnapshot.getValue(DrinkOrdered.class);

要得到对象,我有

java.lang.IllegalStateException: Could not resolve type T

ArticleOrdered 类:

public abstract class ArticleOrdered<T extends Article> {
private int quantity;
private T article;
private String note;
private double price;

public ArticleOrdered(int quantity, T article, String note) {
    this.quantity = quantity;
    this.article = article;
    this.note = note;
    this.price = article.getPrice();
}

public ArticleOrdered() {
    //FIREBASE CONSTUCTOR
}

public T getArticle() {
    return article;
}

public void setArticle(T article) {
    this.article = article;
}
...

DrinkOrdered 类:

public class DrinkOrdered extends ArticleOrdered<Drink> {

public DrinkOrdered(int quantity, Drink article, String note) {
    super(quantity, article, note);
}

public DrinkOrdered() {
    //FIREBASE CONSTRUCTOR
}

我还有另一堂课“PizzaOrdered”(但现在不重要了)

TestActivity 代码:

FirebaseDatabase db = FirebaseDatabase.getInstance();
    DatabaseReference orderRef = db.getReference("prova");
    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            DrinkOrdered a = dataSnapshot.getValue(DrinkOrdered.class);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.d("PIERF", "onCancelled");
        }
    };
    orderRef.addListenerForSingleValueEvent(listener);

以这种方式声明它们是否正确?抱歉英语不好。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    我在我的应用程序中遇到了同样的问题,我通过自己投射对象来解决它:

    DrinkOrdered a = (DrinkOrdered) dataSnapshot.getValue();
    

    【讨论】:

    • 感谢您的回复。现在我有这个异常:“java.lang.ClassCastException:java.util.HashMap 不能转换为 gruppo35.brickbreaker.appagato.database.order.DrinkOrdered”
    【解决方案2】:

    我自己解决了这个问题,使用 Jackson 和这两行代码:

    ObjectMapper mapper = new ObjectMapper();
    DrinkOrdered a = mapper.convertValue(dataSnapshot.getValue(), DrinkOrdered.class);
    

    【讨论】:

      猜你喜欢
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2011-07-14
      • 2023-03-24
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      相关资源
      最近更新 更多