Android Firebase异常"无法解析类型T"

时间:2017-09-19 15:47:00

标签: android firebase firebase-realtime-database

你有一个抽象的通用类" 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
}

我有另一个课程&#34; PizzaOrdered&#34; (但现在不重要了)

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);

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

2 个答案:

答案 0 :(得分:0)

我在我的应用中遇到了同样的问题,设法通过自己投射对象来修复它:

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

答案 1 :(得分:0)

我自己用杰克逊解决了这两行代码:

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