Android 我正在使用recycler视图,可过滤实现有一些内存错误

Android 我正在使用recycler视图,可过滤实现有一些内存错误,android,firebase-realtime-database,android-recyclerview,memory-leaks,sectionedrecyclerviewadapter,Android,Firebase Realtime Database,Android Recyclerview,Memory Leaks,Sectionedrecyclerviewadapter,我正在使用可过滤实现的recycler视图。我的代码运行良好。我有两个按钮在视图持有人将出现根据firebase数据库的状态。当我单击它们时,更改状态的方法可以正常工作。但当我在同一个按钮上第二次执行此操作时(记住按钮根据firebase状态更改),该方法工作正常,但当我第三次执行此操作时,我的应用程序get struct和应用程序无法从firebase获取数据。它只是在日志中显示以下内容 I/ple.aadhar_dha: Background concurrent copying GC fr

我正在使用可过滤实现的recycler视图。我的代码运行良好。我有两个按钮在视图持有人将出现根据firebase数据库的状态。当我单击它们时,更改状态的方法可以正常工作。但当我在同一个按钮上第二次执行此操作时(记住按钮根据firebase状态更改),该方法工作正常,但当我第三次执行此操作时,我的应用程序get struct和应用程序无法从firebase获取数据。它只是在日志中显示以下内容

I/ple.aadhar_dha: Background concurrent copying GC freed 739900(15MB) AllocSpace objects, 0(0B) LOS objects, 49% free, 22MB/45MB, paused 33us total 102.991ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1279638(26MB) AllocSpace objects, 0(0B) LOS objects, 41% free, 33MB/57MB, paused 67us total 145.459ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1325698(27MB) AllocSpace objects, 0(0B) LOS objects, 34% free, 46MB/70MB, paused 51us total 185.916ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1379285(28MB) AllocSpace objects, 0(0B) LOS objects, 30% free, 55MB/79MB, paused 50us total 193.702ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1389025(28MB) AllocSpace objects, 0(0B) LOS objects, 25% free, 69MB/93MB, paused 33us total 295.979ms
我不知道如何处理这个错误,请帮助我

这是我的用户状态类

public class User_Status extends AppCompatActivity {

    Toolbar toolbar;
    ProgressBar progressBar;
    private final List<UserHelperClass> mDataList=new ArrayList<>();
    private user_status_adapter user_status_adapter;
    TextInputLayout searchText;
    String search_string;
    SwipeRefreshLayout refreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user__status);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        refreshLayout=findViewById(R.id.refreshLayout_user_control);
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {

                getUserInformation();
                refreshLayout.setRefreshing(false);
            }
        });

        toolbar = findViewById(R.id.custome_toolbar);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setActionBar(toolbar);
        }

        searchText=findViewById(R.id.textlayout_search_layout_user_control);
        search_string= Objects.requireNonNull(searchText.getEditText()).toString().trim();


        progressBar = (ProgressBar) findViewById(R.id.spin_kit);
        Sprite fadingCircle = new Circle();
        progressBar.setIndeterminateDrawable(fadingCircle);
        progressBar.setVisibility(View.VISIBLE);

        RecyclerView mRecylerView = findViewById(R.id.recycler_view_user_control);
        mRecylerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(User_Status.this);
        user_status_adapter =new user_status_adapter(User_Status.this,mDataList);
        mRecylerView.setLayoutManager(layoutManager);
        mRecylerView.setAdapter(user_status_adapter);

        getUserInformation();

        searchText.getEditText().addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                user_status_adapter.getFilter().filter(s);

            }
        });


    }

    private void getUserInformation() {
        DatabaseReference mRef= FirebaseDatabase.getInstance().getReference("Users");
        mRef.orderByChild("username").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot snapshot1:snapshot.getChildren())
                {
                    if (snapshot1.exists())
                    {
                        UserHelperClass userHelperClass=snapshot1.getValue(UserHelperClass.class);
                        assert userHelperClass !=null;
                        if(!userHelperClass.getUsername().equals("1"))
                        {
                            mDataList.add(userHelperClass);
                        }

                    }else
                    {
                        Log.d("Error","No Snapshot exists");}
                }

                progressBar.setVisibility(View.GONE);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.d("Database Error","Failed to fatch data from the server");
            }
        });
    }
}

public class user_status_adapter extends RecyclerView.Adapter<user_status_adapter.MyViewHolder> implements Filterable {

    private final Context mContext;
    private final List<UserHelperClass> mFilteredList;
    private final List<UserHelperClass> mDataList;

    public user_status_adapter(Context mContext,List<UserHelperClass>mFilteredList)
    {
        this.mContext = mContext;
        this.mFilteredList = mFilteredList;
        mDataList = new ArrayList<>(mFilteredList);
    }

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

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        final UserHelperClass userHelperClass = mFilteredList.get(position);

        holder.fullname.setText(userHelperClass.getFullname());
        holder.aadhar.setText(userHelperClass.getUsername());
        holder.contactno.setText(userHelperClass.getContactno());

        if (userHelperClass.getStatus().equals("Active")) {
            holder.activate.setVisibility(View.GONE);
            holder.deactivate.setVisibility(View.VISIBLE);
        } else {
            holder.deactivate.setVisibility(View.GONE);
            holder.activate.setVisibility(View.VISIBLE);
        }


        String uid = userHelperClass.getUid();
        String username = userHelperClass.getUsername();
        String fullname = userHelperClass.getFullname();

        holder.deactivate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setWarningDialog("Deactivate", username, uid);
            }
        });

        holder.activate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setWarningDialog("Activate", username, uid);
            }
        });
    }

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

    @Override
    public Filter getFilter() {
        return filteredList;
    }

    //filter function
    private final Filter filteredList = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            List<UserHelperClass> filterlist = new ArrayList<>();
            if (constraint == null || constraint.length() == 0) {
                filterlist.addAll(mDataList);
            } else {
                String pattern = constraint.toString().toLowerCase().trim();
                for (UserHelperClass item : mDataList) {
                    if ((item.getFullname().toLowerCase().contains(pattern) && (item.getStatus().equals("Active"))) || (item.getFullname().toLowerCase().contains(pattern) && (item.getStatus().equals("Deactive")))) {
                        filterlist.add(item);
                    }
                }
            }
            FilterResults filterResults = new FilterResults();
            filterResults.values = filterlist;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mFilteredList.clear();
            mFilteredList.addAll((List) results.values);
            notifyDataSetChanged();
        }
    };

    //view holder class
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        TextView fullname, aadhar, contactno;
        Button activate, deactivate;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            fullname = itemView.findViewById(R.id.user_status_single_name);
            aadhar = itemView.findViewById(R.id.user_status_single_aadhar);
            contactno = itemView.findViewById(R.id.user_status_single_contact);

            activate = itemView.findViewById(R.id.user_status_active_button);
            deactivate = itemView.findViewById(R.id.user_status_deactive_button);

        }
    }

    private void setWarningDialog(String string, String username, String uid) {

        new KAlertDialog(mContext, KAlertDialog.WARNING_TYPE)
                .setTitleText("   !! Warning !!   ")
                .setTitleTextSize(28)
                .setContentText("\n Are you sure want to " + string + " User")
                .setContentTextSize(18)
                .setConfirmText("Yes")
                .showConfirmButton(true)
                .setCancelText("No")
                .showCancelButton(true)
                .confirmButtonColor(R.drawable.button_background_white, mContext)
                .cancelButtonColor(R.drawable.button_background, mContext)
                .setConfirmClickListener(new KAlertDialog.KAlertClickListener() {
                    @Override
                    public void onClick(KAlertDialog kAlertDialog) {
                        if (string.equals("Deactivate")) {
                            setDeactiveUser(username, uid);
                            kAlertDialog.dismissWithAnimation();
                        } else {
                            setActiveUser(username, uid);
                            kAlertDialog.dismissWithAnimation();
                        }
                    }
                })
                .setCancelClickListener(new KAlertDialog.KAlertClickListener() {
                    @Override
                    public void onClick(KAlertDialog sDialog) {
                        sDialog.dismissWithAnimation();

                    }


                })
                .show();


    }

    private void setDeactiveUser(String uname, String UID) {
        DatabaseReference mRef = FirebaseDatabase.getInstance().getReference("Users");
        mRef.child(uname).child("status").setValue("Deactive").addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                DatabaseReference mRefuid = FirebaseDatabase.getInstance().getReference("authenticated_User/Users");
                mRefuid.child(UID).child("status").setValue("Deactive").addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        // setSuccessfulDialog("Deactivated");
                        DatabaseReference mRefData_Entry=FirebaseDatabase.getInstance().getReference("User_Data_Entry");
                        mRefData_Entry.child(uname).addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                for (DataSnapshot snapshot1:snapshot.getChildren())
                                {   snapshot1.child("status").getRef().setValue("Deactive");

                                    //DatabaseReference mRefset=FirebaseDatabase.getInstance().getReference("User_Data_Entry");
                                    //mRefset.child(uname).child(snapshot.getKey()).child("status").setValue("Deactive");
                                }

                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError error) {
                              //  setDatabaseErrorDialog();
                            }
                        });

                        setSuccessfulDialog("Deactivated");
                    }
                });

            }
        });
    }

    private void setActiveUser(String uname, String UID) {
        DatabaseReference mRef = FirebaseDatabase.getInstance().getReference("Users");
        mRef.child(uname).child("status").setValue("Active").addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                DatabaseReference mRefuid = FirebaseDatabase.getInstance().getReference("authenticated_User/Users");
                mRefuid.child(UID).child("status").setValue("Active").addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        // setSuccessfulDialog("Activated");
                        DatabaseReference mRefData_Entry=FirebaseDatabase.getInstance().getReference("User_Data_Entry");
                        mRefData_Entry.child(uname).addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                for (DataSnapshot snapshot1:snapshot.getChildren())
                                {
                                    snapshot1.child("status").getRef().setValue("Active");
                                }

                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError error) {
                                //setDatabaseErrorDialog();
                            }
                        });

                        setSuccessfulDialog("Activated");
                    }
                });

            }
        });
    }

    private void setSuccessfulDialog(String string) {

        new KAlertDialog(mContext, KAlertDialog.CUSTOM_IMAGE_TYPE)
                .setTitleText("   !! Successful !!   ")
                .setTitleTextSize(28)
                .setContentText("Good Job !!!\nUser has been Successfully " + string)
                .setContentTextSize(18)
                .setConfirmText("OK")
                .setCustomImage(R.drawable.check, mContext)
                .showConfirmButton(true)
                .confirmButtonColor(R.drawable.button_background_white, mContext)
                .setConfirmClickListener(new KAlertDialog.KAlertClickListener() {
                    @Override
                    public void onClick(KAlertDialog kAlertDialog) {
                        kAlertDialog.dismissWithAnimation();
                        Intent intent = new Intent(mContext, User_Status.class);
                        mContext.startActivity(intent);
                        ((User_Status) mContext).finish();
                    }
                })
                .show();


    }
}

如果你能解决我的问题,那么提前非常感谢你

你说的“失败”是什么意思?是车祸吗?如果是这样的话,还有一个堆栈跟踪。请在logcat上查找,并将其添加到您的问题中。@AlexMamo应用程序没有崩溃…只是它卡住了。我正在从successfulDialoge method recycler视图重新启动活动,无法从firebase查看数据,并且进度条可见。一切正常,只是当我第三次使用recyclerview时,它没有填充数据
2021-04-08 21:19:47.513 4696-4803/com.example.aadhar_dhar D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2021-04-08 21:19:51.189 4696-4696/com.example.aadhar_dhar W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@a999727
2021-04-08 21:19:51.194 4696-4696/com.example.aadhar_dhar V/Monotype: SetAppTypeFace- try to flip, app = com.example.aadhar_dhar
2021-04-08 21:19:51.194 4696-4696/com.example.aadhar_dhar V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
2021-04-08 21:19:58.307 4696-4696/com.example.aadhar_dhar W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@c72c6ae
2021-04-08 21:19:58.311 4696-4696/com.example.aadhar_dhar V/Monotype: SetAppTypeFace- try to flip, app = com.example.aadhar_dhar
2021-04-08 21:19:58.311 4696-4696/com.example.aadhar_dhar V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
2021-04-08 21:20:08.284 4696-4696/com.example.aadhar_dhar W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@81450f9
2021-04-08 21:20:08.288 4696-4696/com.example.aadhar_dhar V/Monotype: SetAppTypeFace- try to flip, app = com.example.aadhar_dhar
2021-04-08 21:20:08.288 4696-4696/com.example.aadhar_dhar V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
2021-04-08 21:20:08.448 4696-4712/com.example.aadhar_dhar W/System: A resource failed to call close. 
2021-04-08 21:20:22.358 4696-4696/com.example.aadhar_dhar W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@9bceedc
2021-04-08 21:20:22.363 4696-4696/com.example.aadhar_dhar V/Monotype: SetAppTypeFace- try to flip, app = com.example.aadhar_dhar
2021-04-08 21:20:22.363 4696-4696/com.example.aadhar_dhar V/Monotype:     Typeface getFontPathFlipFont - systemFont = default#default
2021-04-08 21:20:24.288 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 1597078(32MB) AllocSpace objects, 0(0B) LOS objects, 39% free, 37MB/61MB, paused 27us total 134.621ms
2021-04-08 21:20:25.763 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2219918(43MB) AllocSpace objects, 0(0B) LOS objects, 36% free, 42MB/66MB, paused 27us total 152.031ms
2021-04-08 21:20:28.603 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2126451(42MB) AllocSpace objects, 0(0B) LOS objects, 31% free, 52MB/76MB, paused 30us total 185.849ms
2021-04-08 21:20:31.675 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2338306(46MB) AllocSpace objects, 0(0B) LOS objects, 27% free, 63MB/87MB, paused 29us total 211.099ms
2021-04-08 21:20:34.384 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2581184(51MB) AllocSpace objects, 0(0B) LOS objects, 25% free, 68MB/92MB, paused 30us total 223.458ms
2021-04-08 21:20:37.016 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2775023(53MB) AllocSpace objects, 0(0B) LOS objects, 24% free, 74MB/98MB, paused 49us total 236.490ms
2021-04-08 21:20:39.808 4696-4710/com.example.aadhar_dhar I/ple.aadhar_dha: Background concurrent copying GC freed 2932710(56MB) AllocSpace objects, 0(0B) LOS objects, 24% free, 75MB/99MB, paused 72us total 232.474ms