8

firebase projemle ilgili bir sorun yaşıyorum. Ben firebase GitHub belgelerindeki adımları uyguladım ama bu durumBu özel duruma neden olan java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [sınıf android.view.View]

java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> 
[class android.view.View] 

var bu bir iç sınıf değil bir ViewHolder sınıftır.

public class ProductViewHolder extends RecyclerView.ViewHolder{ 
public View mView; 
public ImageView img; 
public TextView title; 
public TextView price; 
public RatingBar stars; 


ProductViewHolder(View itemView) { 
    super(itemView); 

    mView = itemView; 
    img = (ImageView) itemView.findViewById(R.id.productImg); 
    title = (TextView) itemView.findViewById(R.id.txtTitle); 
    price = (TextView) itemView.findViewById(R.id.txtPrice); 
    stars = (RatingBar) itemView.findViewById(R.id.ratingBar); 
    } 
} 

ve bu veri modelini, ve viewHolder sınıf doldurmak için firebaseRecyclerView kullanıyorum Firebase ilgili kod

@Override 
protected void onStart() { 
    super.onStart(); 

    // Recycler adapter 
    FirebaseRecyclerAdapter<Product, ProductViewHolder> adapter = 
      new FirebaseRecyclerAdapter<Product, ProductViewHolder>(
        Product.class, 
        R.layout.product_list_item, 
        ProductViewHolder.class, 
        firebaseRef.child("product")) { 

       @Override 
       protected void populateViewHolder(ProductViewHolder productViewHolder, Product product, int i) { 
        Picasso.with(ShopsApp.getLyShopsAppContext()) 
          .load(product.getImgUrl()) 
          .placeholder(R.drawable.none) 
          .into(productViewHolder.img); 
        productViewHolder.title.setText(product.getTitle()); 
        productViewHolder.price.setText(product.getPrice()); 
        productViewHolder.stars.setRating(4.0f); 
       } 
      }; 

    recyclerView1.setAdapter(adapter); 

olduğunu Etkinliğime

Not iç sınıfı değil: Özel durum, recyclerView'u içeren etkinlik başlatıldığında oluşur.

+0

Aşağıdaki iki olası neden. Bunlar değilse, sorunu yeniden oluşturabileceğimiz en küçük kodu içerecek şekilde [düzenle] (http://stackoverflow.com/posts/36972335/edit). –

+0

'ProductViewHolder' yapıcınız halka açık değil. –

+0

Sorun çözüldü Thans çok fazla –

cevap

17

Büyük olasılıkla özel ViewHolder alt sınıfıdır:

  • Eğer public static class MyViewHolder o kadar statik işaretlemek gerekir ki bu durumda public MyViewHolder(View itemView) {... } VEYA
  • sınıf başka sınıf içinde tanımlanmış bir yapıcı, eksik.
+0

Hi @Frank van Puffelen, Sınıfın neden statik olması gerektiğini açıklar mısınız? Şimdiden teşekkürler! – Jaco

+1

Bu sadece POJO başka bir sınıfta bir iç sınıf olduğunda gereklidir. Bu durumda Java, nesneye kapsayıcıyı bulmasına izin veren varsayılan kurucuya sınıf ve parametreye gizli bir alan ekler. Bu parametre Firebase'in varsayılan yapıcıyı artık bulamamasını sağlar. Sınıfı "statik" olarak işaretlemek, alanı ve parametreyi kaldırır ve böylece Firebase, parametresiz kurucuyu tekrar bulabilir. –

+0

Harika :) Teşekkürler @Frank van Puffelen! – Jaco

İlgili konular