Android 积累一些常见的开发异常与问题

1.使用PullToRefresh库的时候,想让其自动刷新(setRefreshing)不起效果

    下面的解决方式,当设定的时间小的时候,同样也会导致刷新失败(这里设置了1000ms)

  /**
     * 自动刷新
     */
    private void autoRefresh() {

        gv_tuijian.postDelayed(new Runnable() {
            @Override
            public void run() {
                gv_tuijian.setRefreshing(true);
            }
        }, 1000);
    }

    /**
     * 刷新结束
     */

    private void autoComplete() {
        gv_tuijian.postDelayed(new Runnable() {
            @Override
            public void run() {
                gv_tuijian.onRefreshComplete();
            }
        }, 1000);
    }

  2. Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its 

子线程不能跟新UI的问题,一般用rxjava可以快速方便的切换线程,从而解决问题


    Observable.timer(5000, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1() {
                @Override
                public void call(Long aLong) {
                    if (rl_forward.getVisibility() == VISIBLE) {
                        rl_forward.setVisibility(GONE);
                    }

                }
            });

3.PopupWindow显示的时候,为什么其余的组件不可点击

new PopupWindow 的时候如果只传入三个参数,默认是获取焦点的

        gradePop = new PopupWindow(
                view,//要显示的view
                layoutParams.width,//popupwindow's width
                WindowManager.LayoutParams.WRAP_CONTENT,//popupwindow's height
                false//是否可以获取焦点
        );

4.listview嵌套webview,滑动时,有大量空白的问题

解决方案一

我的解决方案:我修改了我的适配器里的布局文件,把里面的一些match_parent改成自适应,虽然改了之后有爆红的问题,但编译无碍,问题解决

我改之前的布局




    

        

            
        


        

            

            

        

        


            

            


            

                

                


                

            


            

                

                


                

            


            

                

                


                

            

            

                

                


                

            
        


    


    


        

            


            

        

        


        


            


                


                


            


            


                


                


            


        


    

改之后的布局:




    

        

            
        


        

            

            

        

        


            

            


            

                

                


                

            


            

                

                


                

            


            

                

                


                

            

            

                

                


                

            
        


    


    


        

            


            

        

        


        


            


                


                


            


            


                


                


            


        


    

5.如何在广播接收器里展示Dialog

                                batteryDialog = new NiftyDialogBuilder(context, 340, 225,"");
                                View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_battery, null);
                                batteryDialog.setCustomView(dialogView, context);
                                batteryDialog.setCancelable(true);
                                batteryDialog.isCancelableOnTouchOutside(true);
                                batteryDialog.withEffect(Effectstype.Slit);
                                //广播里展示Dialog需要设置
                                batteryDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
                                batteryDialog.show();
                                Logger.i("弹出充满电的框");

添加权限:
   

6.调用系统相机相册
//相册
        RxView.clicks(iv_xiangce).throttleFirst(2, TimeUnit.SECONDS).subscribe(new Action1() {
            @Override
            public void call(Void aVoid) {

          /*      Intent intent = new Intent();
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image*//*");
                if (Build.VERSION.SDK_INT < 19) {
                    intent.setAction(Intent.ACTION_GET_CONTENT);
                } else {
                    intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
                }
                startActivityForResult(intent, 0x102);*/

                Intent albumIntent = new Intent(Intent.ACTION_PICK, null);
                albumIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
                startActivityForResult(albumIntent,0x102);
            }

        });

        RxView.clicks(iv_camera).throttleFirst(2, TimeUnit.SECONDS).subscribe(new Action1() {
            @Override
            public void call(Void aVoid) {
                //调用相机拍照

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(intent, 1);
            }
        });

6.调用系统相册,不选取图片,只是调系统相册(解决打开系统相册,选取图片,闪退)
     ProjectUtils.runApp("com.android.gallery3d","com.android.gallery3d.app.GalleryActivity",MoreActivity.this,"系统相册");

    public static void runApp(String packName, String className, Context context, String apkName) {

        try {
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
            ComponentName cn = new ComponentName(packName, className);
            intent.setComponent(cn);
            context.startActivity(intent);
        } catch (Exception e) {
            Toast.makeText(context, apkName + "未安装!", Toast.LENGTH_SHORT).show();
        }
    }
7.android studio 打不开模拟器(avd):

Emulator PANIC Broken AVD system path. Check your ANDROID_SDK_ROOT value [DSdk]

解决方案:

打开电脑的环境变量:我把 ANDROID_HOME  ANDROID_SDK  ANDROID_SDK_ROOT 都改成我的sdk目录,然后重启AS,就成功了。

Android 积累一些常见的开发异常与问题_第1张图片














你可能感兴趣的:(Android)