8

Ich habe ein Problem mit meinem firebase Projekt. ich die Schritte auf firebase GitHub Dokumentation gefolgt, aber ich habe diese AusnahmeWas verursacht diese Ausnahme java.lang.RuntimeException: java.lang.NoSuchMethodException: <init> [Klasse android.view.View]

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

dies ist ein ViewHolder Klasse, die nicht eine innere Klasse ist.

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

und dies ist die Feuerbasis bezogenen Code

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

I firebaseRecyclerView bin mit Datenmodell zu füllen, und die viewHolder Klasse ist nicht innere Klasse meiner Tätigkeit

Hinweis: Die Ausnahme tritt auf, wenn die Aktivität beginnt, die recyclerView enthält.

+0

Zwei mögliche Ursachen unten. Wenn dies nicht der Fall ist, [edit] (http://stackoverflow.com/posts/36972335/edit) sollte Ihre Frage den minimalen Code enthalten, mit dem wir das Problem reproduzieren können. –

+0

Ihr 'ProductViewHolder'-Konstruktor ist nicht öffentlich. –

+0

Das Problem gelöst Thans viel –

Antwort

17

Wahrscheinlich Ihre benutzerdefinierte ViewHolder Unterklasse ist:

  • einen Konstruktor fehlt public MyViewHolder(View itemView) {... } OR
  • die Klasse innerhalb einer anderen Klasse definiert ist, in diesem Fall müssen Sie public static class MyViewHolder es als statisch markieren.
+0

Hallo @Frank van Puffelen, Könnten Sie erklären, warum die Klasse statisch sein muss? Danke im Voraus! – Jaco

+1

Das wird nur benötigt, wenn der POJO eine innere Klasse in einer anderen Klasse ist. In diesem Fall fügt Java der Klasse ein verstecktes Feld und dem Standardkonstruktor ein Parameter hinzu, mit dem das Objekt seinen Container finden kann. Dieser Parameter bewirkt, dass Firebase den Standardkonstruktor nicht mehr finden kann. Wenn die Klasse als 'static' markiert wird, werden das Feld und der Parameter entfernt, und Firebase kann den parameterlosen Konstruktor wieder finden. –

+0

Großartig :) Danke @Frank van Puffelen! – Jaco