java.lang.RuntimeException:添加窗口失败,请给我解决方案

问题描述 投票:0回答:1

从两天以来,我就找到了解决此异常的方法,请任何人都可以为该问题提供解决方案。在当前活动中,我们使用了recyclerview 1000多个项目。

java.lang.RuntimeException:添加窗口失败引起原因:android.os.DeadObjectException:小宗包裹交易失败;远程进程可能已死亡

这是回收站适配器类的构造函数

 Recycler_Adapter_one_line(Context context, Activity activity, FragmentManager fragmentManager,SQLiteDatabase database,View view){
        this.context=context;
        dataBinder.quetion_list();
        this.activity=activity;
        this.fragmentManager=fragmentManager;
        this.database=database;
        this.view=view;
    }

给定的代码是我的OnCreateViewHolder方法

 @NonNull
    @Override
    public View_holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater l=LayoutInflater.from(context);
      View v=  l.inflate(R.layout.recycler_adapter_one_line_inflater,parent,false);
        final View_holder holder=new View_holder(v);
        final ImageView img_download=v.findViewById(R.id.download);
        final ImageView img_favourite=v.findViewById(R.id.img_favourite);
        img_download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dataBinder.getAnim(context,img_download);
                Answer_Bottom_sheet sheet=new Answer_Bottom_sheet(holder.getAdapterPosition(),dataBinder);
                sheet.show(fragmentManager,"ajay");
            }
        });
        img_favourite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Snackbar.make(view,"Quetion added to favorite...",Snackbar.LENGTH_LONG).setAction("Check out", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                          Intent i=new Intent(context,Favorite_quetion_activity.class);
                          context.startActivity(i);
                    }
                }).show();
                dataBinder.getAnim(context,img_favourite);
                try {
                    ArrayList<Integer> arr=new ArrayList<Integer>();
                    Cursor cursor =database.query("FAVOURITE_TABLE",null,null,null,null,null,null);
                    while (cursor.moveToNext()){
                        arr.add(cursor.getInt(0));
                    }
                    if(arr.isEmpty()){
                        ContentValues values=new ContentValues();
                        values.put("val",holder.getAdapterPosition());
                        database.insert("FAVOURITE_TABLE",null,values);
                        arr.clear();
                    }
                    if(!arr.isEmpty()) {
                      if(!arr.contains(holder.getAdapterPosition())){
                          ContentValues values=new ContentValues();
                          values.put("val",holder.getAdapterPosition());
                          database.insert("FAVOURITE_TABLE",null,values);
                          arr.clear();
                      }
                    }
                }
                catch (Exception e){
                         Toast.makeText(context,""+e,Toast.LENGTH_LONG).show();
                }
            }
        });
        return holder;
    }

以下OnCreateViewHolder方法的代码

 @Override
    public void onBindViewHolder(@NonNull View_holder holder, int position) {
        try {
            ArrayList<Integer> arr = new ArrayList<Integer>();
            Cursor cursor = database.query("FAVOURITE_TABLE", null, null, null, null, null, null);
            while (cursor.moveToNext()) {
                arr.add(cursor.getInt(0));
            }
            if (arr.contains(position)) {
                holder.img_favourite.setImageResource(R.drawable.ic_favorite_white_24dp);
            } else if (!arr.contains(position)) {
                holder.img_favourite.setImageResource(R.drawable.ic_favorite_border_white_24dp);
            }
            holder.txt_sr.setText(Integer.toString(position + 1));
            holder.txt_quetion.setText(dataBinder.arr_quaetion_list.get(position));
        }
        catch (Exception e){
            Toast.makeText(context,""+e,Toast.LENGTH_LONG).show();
        }
    }

ViewHolder的子类的以下代码

class View_holder extends RecyclerView.ViewHolder {
         TextView txt_sr,txt_quetion;
         CardView cardView;
         ImageView img_favourite;
        public View_holder(@NonNull View
                                   itemView) {
            super(itemView);
            try{
            txt_sr=itemView.findViewById(R.id.txt_sr);
            txt_quetion=itemView.findViewById(R.id.txt_quetion);
            cardView=itemView.findViewById(R.id.cardView);
            img_favourite=itemView.findViewById(R.id.img_favourite);
            }
            catch (Exception e){
                Toast.makeText(context,""+e,Toast.LENGTH_LONG).show();
            }
        }

logcat在出现异常后向我显示

例外号:-1

java.lang.IllegalArgumentException
    at android.view.Surface.nativeLockCanvas(Native Method)
    at android.view.Surface.lockCanvas(Surface.java:321)
    at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:3109)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:3083)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2851)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2404)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6886)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
    at android.view.Choreographer.doCallbacks(Choreographer.java:841)
    at android.view.Choreographer.doFrame(Choreographer.java:772)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1015)
    at android.os.Handler.handleCallback(Handler.java:794)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:176)
    at android.app.ActivityThread.main(ActivityThread.java:6651)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)

例外编号:-2

 java.lang.RuntimeException: Adding window failed
                    at android.view.ViewRootImpl.setView(ViewRootImpl.java:769)
                    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
                    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
                    at android.widget.Toast$TN.handleShow(Toast.java:500)
                    at android.widget.Toast$TN$1.handleMessage(Toast.java:404)
                    at android.os.Handler.dispatchMessage(Handler.java:106)
                    at android.os.Looper.loop(Looper.java:176)
                    at android.app.ActivityThread.main(ActivityThread.java:6651)
                    at java.lang.reflect.Method.invoke(Native Method)
                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
                 Caused by: android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
                    at android.os.BinderProxy.transactNative(Native Method)
                    at android.os.BinderProxy.transact(Binder.java:776)
                    at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:801)
                    at android.view.ViewRootImpl.setView(ViewRootImpl.java:757)
                    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)

                    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94) 
                    at android.widget.Toast$TN.handleShow(Toast.java:500) 
                    at android.widget.Toast$TN$1.handleMessage(Toast.java:404) 
                    at android.os.Handler.dispatchMessage(Handler.java:106) 
                    at android.os.Looper.loop(Looper.java:176) 
                    at android.app.ActivityThread.main(ActivityThread.java:6651) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)

                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
android android-recyclerview recycler-adapter
1个回答
0
投票

java.lang.RuntimeException:添加窗口失败原因:android.os.DeadObjectException:小宗地交易失败;远程进程可能死了这个问题解决了。在详细了解了DeadObjectException之后。 DeadObjectException在我的应用程序中引发的原因是,我是在SQLiteDataBase的onBindViewHolder方法内编写代码的。在OnBindViewHolder方法中……当屏幕上显示recyclerView的每一项时,我们的应用程序都会显示在屏幕上,此时应用程序将读取SQLitedatabse中的所有值并检查条件并执行一些任务。......这是我的结论是我的RecyclerView项目快速上下滚动recyclerView的时间,因为大量的过程发生在Cursor上,而发生的过程却过大。因此,我们的应用程序无法正常工作,这意味着Cursor会在毫秒级的时间内读取值的数量。

© www.soinside.com 2019 - 2024. All rights reserved.