我无法使用Firebase作为数据库在屏幕上加载类别的图像和名称

时间:2017-11-10 09:45:48

标签: android firebase firebase-realtime-database fragment

我无法在屏幕上加载每个类别的名称和图像。我尝试了不同的方法加载它们但没有运气。

我正在使用片段来显示类别。

当我运行应用程序时,即使我在模拟器上使用这些不同的方式加载图像和名称,我也得到了相同的错误消息image1

数据库结构类似于此数据库样本image2

这是 CategoryFragment.java 文件

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().child("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);
}
}

我使用以下方法显示带有图像的类别

1

categories = FirebaseDatabase.getInstance().getReferenceFromUrl("https://quizmate-5be87.firebaseio.com/").child("Category");

2

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

3。

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

第三种方式已被使用

Category.java - 模型类

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

这是我运行image3时显示的内容。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

Firebase JSON中的名称和图片字段以大写字母(名称,图片)开头。 getImage()对应于名为image而不是Image的属性。 纠正它的一种方法是让您的变量与Firebase中的变量匹配。