Java 无法使用firebase在RecyclerView上显示图像和详细信息

Java 无法使用firebase在RecyclerView上显示图像和详细信息,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我试图用正确的url链接从firebase检索图像。RecyclerView保持显示食物的“第一”信息,即饼干牛奶杯: 这是我的firebase数据结构: all_uploaded_image //directory |-cookie milk cup |-description: "yes!" //shown successful |-image_uri: "content://com.android.providers.media.documents..." //no necess

我试图用正确的url链接从firebase检索图像。RecyclerView保持显示食物的“第一”信息,即饼干牛奶杯:

这是我的firebase数据结构:

all_uploaded_image //directory
|-cookie milk cup 
  |-description: "yes!" //shown successful
  |-image_uri: "content://com.android.providers.media.documents..." //no necessary in this case
  |-name: "cookie milk cup" //shown successful
  |-price: "1.20" //not shown
  |-uploader_uid: "GSsY4tEo5ZZpS8kkJEpWGLCbFmC3" //no necessary in this case
fish n chips //recursive only on cookie milk cup, so nothing appear in here
  |-description: "delicious fc"
  |-image_uri: "content://com.android.providers.media.documents..."
  |-name: "fish n chips"
  |-price: "1.20"
  |-uploader_uid: "GSsY4tEo5ZZpS8kkJEpWGLCbFmC3"
我正在使用android和java,希望使用fragment从firebase获取信息

这是AllFOodFragment.java

public class AllFoodFragment extends Fragment {
    private View contactsView;
    private ArrayList<Food> entries;
    private DatabaseReference ref;
    private FirebaseDatabase dbr;
    private FoodAdapter adapter;

    private RecyclerView recycler_view;
    public AllFoodFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View contactsView = inflater.inflate(R.layout.home_main, container, false); //v

        recycler_view = (RecyclerView) contactsView.findViewById(R.id.recycler_view);
        recycler_view.setHasFixedSize(true);
        recycler_view.setItemAnimator(new DefaultItemAnimator());

        final FragmentActivity ga = getActivity(); //2a
        LinearLayoutManager lm = new LinearLayoutManager(ga); //2
        recycler_view.setLayoutManager(lm);

        entries = new ArrayList<Food>();

        ref = FirebaseDatabase.getInstance().getReference().child("all_uploaded_image");
        ref.addChildEventListener(new ChildEventListener(){
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                for(DataSnapshot ds: dataSnapshot.getChildren()) {
                    //Log.e("Count " ,"" + dataSnapshot.getChildrenCount());
                    Food data = dataSnapshot.getValue(Food.class);
                    //data.setPrice(dataSnapshot.child("price").getValue().toString());
                    //data.setImageUrl(dataSnapshot.child("image_uri").getValue().toString());
                    entries.add(data);
                    //Log.e("Get All Description", data.get_price());
                }
                adapter = new FoodAdapter(getActivity(), entries);
                adapter.notifyDataSetChanged();
                adapter.setListFood(entries);


                 //3; No adapter attached in here, but program runs
                recycler_view.setAdapter(adapter);
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
        return contactsView;

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    public void onViewCreated(View view, @Nullable Bundle savedUbstabceState){
        super.onViewCreated(view, savedUbstabceState);
        this.contactsView = view;
    }
}
我得到的错误是E/RecyclerView:没有连接适配器跳过布局 在com.example.hungrystomach.Model.Food类上找不到图像uri的setter/field[但实际上我不希望图像uri显示在我的recyclerview中,所以我跳过了TextView]


recyclerView没有显示任何图像,即使我在foodDaper.java中使用了带有缩略图的FoodIcon。我已经试了三个星期了,还是没有希望。我想我会得到所有我需要的信息。我知道它有点长,但任何建议和答案都将不胜感激。

删除适配器。notifyDataSetChanged();在设置适配器列表项之前,还要将layoutManager添加到recyclerView,然后重试感谢您的回复,但仍然没有显示图像和价格。我想如果我有图片url,我可以显示所有我想要的缩略图,但它没有。所以图片和价格不显示,但其他可以看到,对吗?是的。并且只保留递归的第一个元素,即“cookie milk cup”,那么问题可能还存在于布局中,请尝试调试列表中要获取的值的代码
public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.FoodViewHolder> {
    private Context m_context;
    private ArrayList<Food> m_listFood  = new ArrayList<Food>();

    public FoodAdapter(Context context, ArrayList<Food> food_list) {//m_context, food_list
        this.m_context = context;
        this.m_listFood = food_list;
    }


    @NonNull
    @Override
    public FoodViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_fragment_all_food, parent, false);
        return new FoodViewHolder(v);
    }


    public class FoodViewHolder extends RecyclerView.ViewHolder{
        public ImageView FoodIcon;
        public TextView FoodName;
        public TextView FoodDescription;
        public TextView FoodPrice;
        public Button Fooddetail;

        public FoodViewHolder (View itemView){
            super(itemView);
            FoodIcon = (ImageView)itemView.findViewById(R.id.thumbnail); //icon 
            FoodName = itemView.findViewById(R.id.foodname);
            FoodDescription = itemView.findViewById(R.id.fooddescription);
            FoodPrice = itemView.findViewById(R.id.foodprice);
            Fooddetail = itemView.findViewById(R.id.fooddetail);
        }

        public void onClick(View view) {
        }
    }

    @Override
    public void onBindViewHolder(@NonNull FoodViewHolder holder, int position) {
        Food f = m_listFood.get(position);
        holder.FoodName.setText(f.get_name());
        holder.FoodDescription.setText(f.get_description());
        holder.FoodPrice.setText(f.get_price());
        holder.FoodPrice.setText(f.get_url());
        //Picasso.get().load(m_listFood.get(position).get_url()).fit().into(holder.FoodIcon);
        Glide.with(m_context).load(f.get_url()).into(holder.FoodIcon); //getListFood().get(position).get_icon()
    }

    @Override
    public int getItemCount() {
        return m_listFood.size();
    }

    public Context get_context() {
        return m_context;
    }

    public void setListFood(ArrayList<Food> m_listFood){
        this.m_listFood = m_listFood;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent" android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="4dp"
    android:layout_marginTop="4dp"
    android:layout_marginBottom="4dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <ImageView //icon not shown, white
            android:id="@+id/thumbnail"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_marginStart="8dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@android:drawable/star_big_on" />

            <TextView
                android:id="@+id/foodname"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_marginStart="191dp"
                android:layout_marginTop="16dp"
                android:text="Name"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/thumbnail"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/fooddescription"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/foodname"
                android:layout_marginEnd="86dp"
                android:layout_marginBottom="-91dp"
                android:text="Description"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/thumbnail"
                app:layout_constraintTop_toBottomOf="@+id/foodname" />

            <TextView
                android:id="@+id/foodprice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_alignParentEnd="true"
                android:layout_marginTop="85dp"
                android:layout_marginEnd="95dp"
                android:text="Price"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.487"
                app:layout_constraintStart_toEndOf="@+id/thumbnail"
                app:layout_constraintTop_toBottomOf="@+id/fooddescription"
                app:layout_constraintVertical_bias="0.0" />

            <Button
                android:id="@+id/fooddetail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_marginEnd="79dp"
                android:layout_marginBottom="16dp"
                android:background="@color/colorPrimary"
                android:text="Detail"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.496"
                app:layout_constraintStart_toEndOf="@+id/thumbnail"
                app:layout_constraintTop_toBottomOf="@+id/foodprice"
                app:layout_constraintVertical_bias="0.0" />
        </RelativeLayout>
    </androidx.cardview.widget.CardView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </com.google.android.material.appbar.AppBarLayout>


    <LinearLayout
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <EditText
            android:autofillHints="email"
            android:layout_margin="15dp"
            android:inputType="textEmailAddress"
            android:hint="Enter Email"
            android:id="@+id/et_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:layout_margin="15dp"
            android:inputType="textPassword"
            android:hint="Enter Password"
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <Button
            android:layout_margin="15dp"
            android:hint="Register"
            android:id="@+id/btn_register"
            android:layout_width="match_parent"
            android:onClick="click_to_register_new_user"
            android:layout_height="wrap_content" />

        <Button
            android:layout_margin="15dp"
            android:hint="Login"
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />




    </LinearLayout>

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="137dp"
        android:text="@string/reset_string" />

</RelativeLayout>
public class Food {
    public String name;
    public String description;
    public String price;
    public String img_url;
    public String icon;

    public Food() {
        //empty
    }


    public Food(String name, String description, String price, String imageUrl) {
        if (name.trim().equals("")) {
            name = "No Name";
        }
        this.name = name;
        this.description = description;
        this.price = price;
        this.img_url = imageUrl;
    }


    public String get_name() {
        return name;
    }


    public String get_description() {
        return description;
    }


    public String get_price() {
        return price;
    }
    public String get_icon() {
        return icon;
    }

    public String get_url() {
        return img_url;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public void setImageUrl(String imageUrl) {
        img_url = imageUrl;
    }

    public void set_icon(String icon) {
        this.icon = icon;
    }



}