你有一个抽象的通用类" 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);
以这种方式声明它们是否正确?抱歉英文不好。
答案 0 :(得分:0)
我在我的应用中遇到了同样的问题,设法通过自己投射对象来修复它:
DrinkOrdered a = (DrinkOrdered) dataSnapshot.getValue();
答案 1 :(得分:0)
我自己用杰克逊解决了这两行代码:
ObjectMapper mapper = new ObjectMapper();
DrinkOrdered a = mapper.convertValue(dataSnapshot.getValue(), DrinkOrdered.class);