0

これはデータベースとしてFirebaseを使用し、画像を画面に読み込むためにPicassoを使用しています。私がログインした後、私は各カテゴリーの画像と名前を見ることができません。画面に表示される画像の種類と名前を表示するには

私はセッターとゲッターとモデル名「カテゴリ」を使用しているが、これらのメッセージは、私のlogcatに来る続ける:

screenshot

私のモデルは、現時点では次のようになります。

public class Category { 

    private String name, image; 

    public Category() { 
    } 

    public Category(String name, String image) { 
     this.name = name; 
     this.image = image; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 
} 

これは私のデータベースのサンプルです。カテゴリ画像リンクとその名前が表示されます。

database structure

カテゴリのリストは、フラグメントに表示することになっています。これは私の断片クラスです。

public class CategoryFragment extends Fragment { 

    View myFragment; 

    RecyclerView categoryList; 
    RecyclerView.LayoutManager layoutManager; 
    FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter; 

    // Firebase Tings 
    FirebaseDatabase database; 
    DatabaseReference categories; 

    public static CategoryFragment newInstance() { 
     CategoryFragment categoryFragment = new CategoryFragment(); 
     return categoryFragment; 
    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     database = FirebaseDatabase.getInstance(); 
     categories = database.getReference("Category"); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     myFragment = inflater.inflate(R.layout.fragment_category, container, false); 
     categoryList = (RecyclerView) myFragment.findViewById(R.id.categoryList); 
     categoryList.setHasFixedSize(true); 
     layoutManager = new LinearLayoutManager(container.getContext()); 
     categoryList.setLayoutManager(layoutManager); 

     loadCategories(); 

     return myFragment; 
    } 

    private void loadCategories() { 
     adapter = new FirebaseRecyclerAdapter<Category, CategoryViewHolder>(
       Category.class, 
       R.layout.category_item, 
       CategoryViewHolder.class, 
       categories 
     ) { 
      @Override 
      protected void populateViewHolder(CategoryViewHolder viewHolder, final Category model, int position) { 
       viewHolder.tvCategoryName.setText(model.getName()); 
       Picasso.with(getActivity()) 
         .load(model.getImage()) 
         .into(viewHolder.ivCategoryImage); 

       viewHolder.setItemClickListener(new ItemClickListener() { 
        @Override 
        public void onClick(View view, int position, boolean isLongClick) { 
         Toast.makeText(getActivity(), String.format("%s | %s", adapter.getRef(position).getKey(), model.getName()), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     }; 
     adapter.notifyDataSetChanged(); 
     categoryList.setAdapter(adapter); 
    } 
} 

異なるソリューションは、カテゴリ画像と名前が、運を見るために私が見てきた

public class CategoryViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public TextView tvCategoryName; 
    public ImageView ivCategoryImage; 

    private ItemClickListener itemClickListener; 

    public CategoryViewHolder(View itemView) { 
     super(itemView); 

     ivCategoryImage = (ImageView) itemView.findViewById(R.id.ivCategoryImage); 
     tvCategoryName = (TextView) itemView.findViewById(R.id.tvCategoryName); 

     itemView.setOnClickListener(this); 
    } 

    public void setItemClickListener(ItemClickListener itemClickListener) { 
     this.itemClickListener = itemClickListener; 
    } 

    @Override 
    public void onClick(View view) { 
     itemClickListener.onClick(view, getAdapterPosition(), false); 
    } 
} 

これは私のCategoryViewHolderクラスです。

UPDATE: 私はdatabase to this structure

を更新した私は、デバイス

categories=FirebaseDatabase.getInstance().getReference().child("Category"); 

    /*database = FirebaseDatabase.getInstance(); 
    categories = database.getReference("Category");*/ 

しかし、まだありません成功時にデータを示し、これらの2つの方法を使用して試してみました。

代わりにthe same errorsと表示されます。どのような形ででもモデルを変更していません。

ありがとうございました。

P.S以前に言及したソリューションのおかげで、それはうまくいかなかった。

これ以上ヘルプがあれば十分です。あなたのリンクから

答えて

0

データベース構造は、あなたのデータに到達できるようにする第2カテゴリーのノードを参照する必要があり しかし、あなたはそれを行うにはいないようだ。この

category 

|-category 

|01 

-------name 
-------image 

のようであるように思われます。

ので、代わりのあなたは、これはあなたのデータベース

を参照するための正しい方法であるべき追加のリンクによると、この

DatabaseReference categories; 

//and refer to your database like that 

categories=FirebaseDatabase.getInstance().getReference().child("Category").child("Category"); 

を使用しようとするコード

database = FirebaseDatabase.getInstance(); 
categories = database.getReference("Category"); 

のこれらの2行を使用して

0

現在のデータベース構造にはCategoryオブジェクトが/Category/Categoryノードの下にネストされていますが、FirebaseRecyclerAdapterが親の/Categoryノードを指しています。

FirebaseRecyclerAdapterは、/Categoryノードの子をCategoryクラスにマーシャリングしようとしていますが、その場所に一致する直接の子はありません。

{ 
    "Category" : { 
    "01" : { 
     "Name" : "Animals", 
     "image" : "..." 
    }, 
    "02" : { 
     ... 
    } 
    } 
} 
:カテゴリが /Categoryノードの直接の子としてリストされるように、データベースの構造を変更する、

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    database = FirebaseDatabase.getInstance(); 
    categories = database.getReference("Category").child("Category"); 
} 

または:

ことは、これを修正するには、FirebaseRecyclerAdapterが使用している参照を調整することができます

関連する問題