如何将图像从存储链接到实时数据库(Firebase)

迈克尔:

我有一个关于如何将图像链接到实时数据库中的每个对象的问题。

我的应用程序中有RecyclerView,其中包含Firebase数据库中的所有对象。

该对象包含lampTitle,lampDesc,lampType。

在此处输入图片说明在Firebase存储中,我有3张图像,应在“回收器”视图中的每个对象下显示。每个图像应与其对象匹配。例如。air_condition.png应该带有AirCondition对象,等等。

在此处输入图片说明 我现在所拥有的:

我的LightsFragment-包含回收站视图:

public class LightsFragment extends Fragment implements LightsPresenter {

    private RecyclerView RVLights;
    private ArrayList<Light> lights = new ArrayList<>();
    private Light light;
    private LightsAdapter lightsAdapter;
    private LightsView presenter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_lights, container, false);
        presenter = new LightsView(lights, light, this);
        RVLights = view.findViewById(R.id.RVLights);
        presenter.loadData();
        return view;
    }

    @Override
    public void setAdapter() {
        lightsAdapter = new LightsAdapter(getActivity(), lights);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
        RVLights.setLayoutManager(layoutManager);
        RVLights.setAdapter(lightsAdapter);
    }

灯适配器:

public class LightsAdapter extends RecyclerView.Adapter<LightsAdapter.LightsViewHolder> {

    private Context context;
    private ArrayList<Light> lights;

    public LightsAdapter(Context context, ArrayList<Light> lights) {
        this.context = context;
        this.lights = lights;
    }

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

    @Override
    public void onBindViewHolder(@NonNull LightsViewHolder holder, int position) {
        final Light light = lights.get(position);
        holder.TVlightTitle.setText(light.getLampTitle());
        holder.TVLightDesc.setText(light.getLampDesc());
        holder.TVLightType.setText(String.valueOf(light.getLampType()));
    }

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

    public class LightsViewHolder extends RecyclerView.ViewHolder {

        private TextView TVlightTitle;
        private TextView TVLightDesc;
        private TextView TVLightType;
        private ImageView IVLightImage;

        public LightsViewHolder(@NonNull View itemView) {
            super(itemView);
            TVlightTitle = itemView.findViewById(R.id.lightTitle);
            TVLightDesc = itemView.findViewById(R.id.lightDesc);
            TVLightType = itemView.findViewById(R.id.lightType);
            IVLightImage = itemView.findViewById(R.id.lightImage);
        }
    }

灯类:

public class Light {

    private int lampType;
    private String lampTitle;
    private String lampDesc;

    public Light(String lampDesc, String lampTitle, int lampType) {
        this.lampType = lampType;
        this.lampTitle = lampTitle;
        this.lampDesc = lampDesc;
    }

    public Light() {
    }

    public int getLampType() {
        return lampType;
    }

    public void setLampType(int lampType) {
        this.lampType = lampType;
    }

    public String getLampTitle() {
        return lampTitle;
    }

    public void setLampTitle(String lampTitle) {
        this.lampTitle = lampTitle;
    }

    public String getLampDesc() {
        return lampDesc;
    }

    public void setLampDesc(String lampDesc) {
        this.lampDesc = lampDesc;
    }

}

灯光演示者和视图:

public interface LightsPresenter {

    void setAdapter();

}

public class LightsView {

    private ArrayList<Light> lights = new ArrayList<>();
    private Light light;
    private FirebaseDatabase db;
    private DatabaseReference allLights;
    private LightsPresenter lightsPresenter;

    public LightsView(ArrayList<Light> lights, Light light, LightsPresenter lightsPresenter) {
        this.lights = lights;
        this.light = light;
        this.lightsPresenter = lightsPresenter;
    }

    public void loadData() {
        db = FirebaseDatabase.getInstance();
        allLights = db.getReference("AllLights");

        allLights.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    light = dataSnapshot1.getValue(Light.class);
                    lights.add(light);
                    Log.i("LightsDataLoaded", "true " + light.getLampTitle());
                }
                lightsPresenter.setAdapter();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.i("LightsDataLoaded", "false ");

            }
        });
    }

}

那就是我的结果:

在此处输入图片说明

亚历克斯·莫莫:

无需匹配任何内容,您只需将图像网址存储在每个对象下:

Firebase-root
   |
   --- AllLights
          |
          --- AirBag
                |
                --- lampDesc: "Is it safe..."
                |
                --- lampTitle: "Air bag Lamp"
                |
                --- lampType: 1
                |
                --- lampImageUrl: "Firebase Storage Image Url" //New property added

如您所见,我添加了一个新属性,该属性应包含相应图像的url。最后,您只需使用Glide即可显示它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Firebase的身份验证链接到实时数据库?

Firebase存储-将图像上传到Firebase存储并在实时数据库中创建指向该数据库的链接

如何将图像 url 从 Firebase Storage 保存到 Firebase 实时数据库,即我设备中的图像

是否可以将firebase auth链接到实时数据库

从Firebase存储和实时数据库获取图像

如何在实时数据库 firebase android 中存储下载图像 url

如何将数据从Google Pub / Sub发送到Firebase实时数据库

如何将延迟和离线的数据写入 Firebase 实时数据库?

我如何将多个数据保存到Firebase实时数据库中

如何将React表单数据添加到Firebase实时数据库?

如何将数据从Google Cloud pubsub提取到Firebase实时数据库

如何将 json 文件上传到 Firebase 实时数据库 angular 8

如何将价值与Firebase实时数据库的子项进行比较?

如何将列表推送到 Firebase 实时数据库

如何将图像的下载 URL 设置为 Firestore 数据库和实时数据库

使用laravel将Firebase实时数据库连接到MYSQL数据库表

将Android Room数据库与Firebase实时数据库链接

如何将图像和文档上载到Firebase Storage,获取下载URL并将它们同时插入实时数据库?

如何从firebase存储获取imageUrl以存储在firebase实时数据库中?

如何将上传到Firebase Cloud Storage的图像的公共URL上传到实时数据库

如何在android studio 3.0中连接firebase并通过按钮将数据存储在实时数据库中

登录后如何将新用户数据保存到Firebase实时数据库

将Firebase实时数据库数据存储在Firestore中?

在实时数据库中存储 Firebase 云消息

用户注册期间如何在Firebase的实时数据库中存储数据?

如何将 SQL 图像列链接到外部数据库?

将图片上传到Firebase实时数据库或存储?

React + Firebase:如何添加项目以将数据列表到firebase实时数据库中

如何使用Firebase从实时数据库存储和检索图像url?