我正在使用带有一些内存错误的可过滤实现的回收器视图

问题描述

我正在使用带有可过滤实现的回收器视图。我的代码工作正常。我在视图持有者中有两个按钮,它们会根据 firebase 数据库状态出现。当我单击它们时,更改状态的方法工作正常。但是,当我在同一个按钮上第二次执行此操作时(记住按钮根据 firebase 状态更改),该方法工作正常,但是当我第三次执行此操作时,我的应用获取 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,41% free,33MB/57MB,paused 67us total 145.459ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1325698(27MB) AllocSpace objects,34% free,46MB/70MB,paused 51us total 185.916ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1379285(28MB) AllocSpace objects,30% free,55MB/79MB,paused 50us total 193.702ms
I/ple.aadhar_dha: Background concurrent copying GC freed 1389025(28MB) AllocSpace objects,25% free,69MB/93MB,paused 33us total 295.979ms

我不知道如何处理这个错误,请帮帮我

这是我的 User_Status 类

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 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",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();


    }
}

日志猫

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,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,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,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,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,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,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,75MB/99MB,paused 72us total 232.474ms

如果您解决了我的问题,非常感谢您

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...