回收站视图中的数据未上传到 Firebase

Data in recycler view not being uploaded to Firebase

所以我对此做了一些研究,但无法解决这个问题,网上的每个解决方案都导致我出现新错误。

我目前正在开发一个活动应用程序,对 Android Studio 来说还比较陌生。

我在管理应用程序中有一个 RecyclerView,用于验证组织者在 Firebase 上上传的所有事件数据。主办方上传event_tile、event_desc、event_image等数据。这存储在根 "Event" 下的 Firebase 中。稍后,管理应用程序以回收者视图的形式接收这些请求,并有一个按钮来批准它们。所有批准的事件都将存储在 Firebase 的单独 table 中,根目录为 "Approved_Events".

我卡在审批部分了。代码 运行 没有错误,但没有数据上传到我的 Firebase 控制台。

这是我的主Activity

     public class MainActivity extends AppCompatActivity {

        private RecyclerView request_eventList;
        private DatabaseReference mRef, aRef;
        private Button verify_button;
        private TextView request_title, request_desc;
        private ImageView request_image;
        ProgressDialog progressDialog;


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

            progressDialog = new ProgressDialog(this);
            mRef = FirebaseDatabase.getInstance().getReference().child("Event");
            setContentView(R.layout.activity_main);
            request_eventList = (RecyclerView) findViewById(R.id.request_eventList);
            request_eventList.setHasFixedSize(true);
            request_eventList.setLayoutManager(new LinearLayoutManager(this));


        }

        @Override
        protected void onStart() {
            super.onStart();

            FirebaseRecyclerAdapter<Event, RequestViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Event, RequestViewHolder>(
                    Event.class,
                    R.layout.admin_event_row,
                    RequestViewHolder.class,
                    mRef

            ) {
                @Override
                protected void populateViewHolder(RequestViewHolder viewHolder, Event model, int position) {
                    viewHolder.setTitle(model.getTitle());
                    viewHolder.setDesc(model.getDesc());
                    viewHolder.setImage(getApplicationContext(), model.getImage());
                }
            };
            request_eventList.setAdapter(firebaseRecyclerAdapter);

        }

        public static class RequestViewHolder extends RecyclerView.ViewHolder {
            View mView;
            public Button verify_button;
            DatabaseReference mRef, aRef;
            ProgressDialog progressDialog;

            public RequestViewHolder(View itemView) {
                super(itemView);
                mView = itemView;


                progressDialog = new ProgressDialog(mView.getContext());
                verify_button = (Button) mView.findViewById(R.id.approve_button);
                mRef = FirebaseDatabase.getInstance().getReference().child("Event");
                aRef = FirebaseDatabase.getInstance().getReference().child("ApprovedEvents");

                verify_button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {mRef.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Map <String, String> map = (Map<String, String>) dataSnapshot.getValue();

                            String title_val = map.get("title");
                            String desc_val = map.get("desc");
                            String image_val = map.get("image");

                            aRef.child("approved_title").setValue(title_val);
                            aRef.child("approved_desc").setValue(desc_val);
                            aRef.child("approved_image").setValue(image_val);
                            progressDialog.dismiss();
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {

                        }
                    });


                    }
                });

            }

            public void setTitle(String title) {
                TextView request_title = (TextView) mView.findViewById(R.id.request_title);
                request_title.setText(title);


            }

            public void setDesc(String desc) {
                TextView request_desc = (TextView) mView.findViewById(R.id.request_desc);
                request_desc.setText(desc);
            }

            public void setImage(Context ctx, String image) {
                ImageView request_image = (ImageView) mView.findViewById(R.id.request_image);
                Picasso.with(ctx).load(image).into(request_image);
            }

        }
    }

主要Activity XML

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

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/request_eventList"
        android:clickable="true">
    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

事件JavaClass

    public class Event {
        private String title, desc, image;

        public Event(String title, String desc, String image) {
            this.title = title;
            this.desc = desc;
            this.image = image;
        }
        public Event(){

        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDesc() {
            return desc;
        }

        public void setDesc(String desc) {
            this.desc = desc;
        }

        public String getImage() {
            return image;
        }

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

admin_event_row XML 将填充 recyclerView 的文件

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/request_image"
    android:src="@drawable/abc_btn_check_material"
    android:adjustViewBounds="true" />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/request_title"
    android:text="Title will come here "
    android:padding="10dp"
    android:textStyle="bold"
    android:textSize="15dp" />
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/request_desc"
    android:text="Desc will come here "
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp" />
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/approve_button"
    android:text="Yeah it's Cool "/>
</LinearLayout>

Final App Look

如果您的活动有更多未批准的 child,请将 verify_button.setOnClickListener 从持有人移至 Adapter-populateViewHolder。您必须将 verify_button.setOnClickListener 连接到 recycleviewer 中的行才能从单击的项目中获取标题、描述和图像的值。

protected void populateViewHolder(RequestViewHolder viewHolder, Event model, int position) {
                viewHolder.setTitle(model.getTitle());
                viewHolder.setDesc(model.getDesc());
                viewHolder.setImage(getApplicationContext(), model.getImage());

            final String title = model.getTitle();
            final String desc = model.getDesc();
            final String image = model.getImage();

            final DatabaseReference aRef = FirebaseDatabase.getInstance().getReference();

            viewHolder.verify_button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {

                    String key = aRef.child("ApprovedEvents").push().getKey();

                    Event event = new Event(title, desc, image );

                    Map<String, Object> eventValues = event.toMap();

                    Map<String, Object> childUpdates = new HashMap<>();

                    childUpdates.put("/ApprovedEvents/" + key, eventValues);

                    aRef.updateChildren(childUpdates);


                }
            });


        }
    };