2016-03-30 7 views
3

誰でも助けてくれますか?データバインディングを使ってfirebaseでrecyclerviewを設定する

私はこのエラーが発生した新しい開発者です。私は断片化したデータバインディングを通して、firebaseを使ってrecyclerviewを実装しようとしています。

ProductListFragment.java

public class ProductListFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    RecyclerView recyclerView = (RecyclerView) inflater.inflate(R.layout.recycler_view, container, false); 
    FirebaseRecyclerAdapter adapter; 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    Firebase mFirebaseRef = new Firebase(Constants.FIREBASE_URL).child("subcategories").child("abc"); 

    adapter = new FirebaseRecyclerAdapter<Product, ViewHolder>(
      Product.class, R.layout.fragment_list_product, ViewHolder.class, mFirebaseRef) { 
     @Override 
     protected void populateViewHolder(ViewHolder viewHolder, Product product, int i) { 

      FragmentProductListBinding binding = viewHolder.getBinding(); 

      binding.setProduct(product); 
     } 
    }; 
    recyclerView.setAdapter(adapter); 
    return recyclerView; 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 

    FragmentProductListBinding binding; 

    public ViewHolder (View rootView) { 
     super(rootView); 
     binding = DataBindingUtil.bind(rootView); 
    } 
    public FragmentProductListBinding getBinding() { 
     return binding; 
    } 
} 

}

Product.javaはPOJO

public class Product extends BaseObservable { 

public String productTitle; 
public String productUnit; 
public String productMRP; 
public String productSellingPrice; 
public String productDescription; 

public Product() { 

} 

@Bindable 
public String getProductUnit() { 
    return productUnit; 
} 

public void setProductUnit(String productUnit) { 
    this.productUnit = productUnit; 
} 

@Bindable 
public String getProductMRP() { 
    return productMRP; 
} 

public void setProductMRP(String productMRP) { 
    this.productMRP = productMRP; 
} 

@Bindable 
public String getProductSellingPrice() { 
    return productSellingPrice; 
} 

public void setProductSellingPrice(String productSellingPrice) { 
    this.productSellingPrice = productSellingPrice; 
} 

@Bindable 
public String getProductDescription() { 
    return productDescription; 
} 

public void setProductDescription(String productDescription) { 
    this.productDescription = productDescription; 
} 

@Bindable 
public String getProductTitle() { 
    return productTitle; 
} 

public void setProductTitle(String productTitle) { 
    this.productTitle = productTitle; 
} 

}

fragment_list_product.xml

が含ま

ここに私が得ているエラーがあります。

E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.abc.www.abc, PID: 1894 
                      com.firebase.client.FirebaseException: Failed to bounce to type 
                       at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
                       at com.firebase.ui.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:161) 
                       at com.firebase.ui.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:150) 
                       at com.firebase.ui.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:190) 
                       at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5453) 
                       at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5486) 
                       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4723) 
                       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4599) 
                       at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988) 
                       at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384) 
                       at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347) 
                       at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574) 
                       at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3003) 
                       at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2881) 
                       at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1457) 
                       at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:147) 
                       at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:285) 
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                       at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                       at android.view.Choreographer.doFrame(Choreographer.java:603) 
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5422) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                       Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.abc.www.abc.model.Product] from String value; no single-String constructor/factory method 
                       at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:428) 
                       at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:299) 
                       at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1056) 
                       at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:136) 
                       at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:123) 
                       at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
                       at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
                       at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181) 
                       at com.firebase.ui.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:161)  
                       at com.firebase.ui.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:150)  
                       at com.firebase.ui.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:190)  
                       at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5453)  
                       at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5486)  
                       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4723)  
                       at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4599)  
                       at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1988)  
                       at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1384)  
                       at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1347)  
                       at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)  
                       at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3003)  
                       at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2881)  
                       at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1457)  
                       at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:147)  
                       at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:285)  
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)  
                       at android.view.Choreographer.doCallbacks(Choreographer.java:670)  
                       at android.view.Choreographer.doFrame(Choreographer.java:603)  
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)  
                       at android.os.Handler.handleCallback(Handler.java:739)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:148)  
                       at android.app.ActivityThread.main(ActivityThread.java:5422)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

firebaseからフェッチしようとしているデータベースです。

subcategories{ 
      abc{ 
       product-description:"xxadasccdcnsdcnsdc" 
       product-mrp: 100 
       product-selling-price: 80 
       product-title:"Name" 
       product-unit: "100 meter"} 

}

+0

ここであまりにも多くのコードと、あまりにも多くのスクロールバーがあります。 JSONをJavaクラスに読み込むのに問題がある場合は、JSON、Javaクラス、および最小限のコードをポストして、エラーをトリガーする 'snapshot.getValue(YourClass.call)'に行きます。他のすべての情報は、問題とは関係なく、途中で取り込まれます。 [MCVE](http://stackoverflow.com/help/mcve)を参照してください。 –

+0

同じエラーで最小限に抑えられました。レポを見てみましょう:https://github.com/tusharrai2/ExampleFirebaseDatabinding.git –

+0

これはアプリ全体で、断片、ビュー、すべてがあります。正しいデータにリスナーを付けて 'snapshot.getValue(Product.class)'を呼び出すだけで済みます。それを減らすことができれば、それはあなたの質問にJSONと共に(テキストとして、スクリーンショットなしで)収まるでしょう。 –

答えて

1

使用@JsonPropertyあなたのデシベルでそれを一致させるためにあなたの変数の上( "製品の説明")。

@JsonProperty("product-title") 
public String productTitle; 

@JsonProperty("product-unit") 
public String productUnit; 

ここでの問題は、JSONはPOJOでプロパティ名に一致していない逆シリアル化/シリアル化するためにFirebase Androidのクライアントで使用されるジャクソンライブラリとDB

+0

以前私のDBは "productTitle"、 "productUnit"と同じエラーを出していましたので、dbを変更しました。 –

+0

が同じエラーに変更されました。@Bindable @JsonProperty( "product-unit")public String getProductUnit(){return productUnit; } public void setProductUnit(String productUnit){これです。productUnit = productUnit; } –

+0

正確なスキーマを貼り付けることができます – Viven

1

が上@JsonIgnoreProperties(ignoreUnknown = true)を使用していることですあなたのBaseObservable.classのトップ

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Product extends BaseObservable { 

public Product() { 

} 

Refer this link for reference

+0

これは同じエラーです。 –

関連する問題