AndroidStudio开发遇见问题总结

持续更新,以便查阅

1:cant resolve sympbol RecyclerView

说明添加的依赖有问题,按照路径D:\ANDROIDSDK\extras\android\m2repository\com\android\support\recyclerview-v7,看自己sdk中实际有什么依赖来看 去添加依赖。

AndroidStudio开发遇见问题总结_第1张图片红框内这一项要和电脑中的版本对应上。还有一种情况是:程序中没有加载上RecyclerView

2:在接手别人的项目时 经常会遇见不知道当前运行的是哪个activity

在androidStudio中,当使用真机或者模拟器调试应用时,应用运行到某一个页面。而开发人员不知道当前UI的类的时候,可以通过如下命令快速找到对应的activity.

可以打开androidStudio自带的终端,定位到SDK的adb文件下面。

这是定位方法

D:\Aldx\DeviceManagerApp11>cd D:\ANDROIDSDK\platform-tools

分开输入,先输入adb shell

然后再输入 dumpsys activity | grep 'mFoc'
3:在开发中需要数学计算时 的一个工具类

public class Arith {
    /**
     * 提供精确加法计算的add方法
     *
     * @param value1 被加数
     * @param value2 加数
     * @return 两个参数的和
     */
    public static double add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();
    }

    /**
     * 提供精确减法运算的sub方法
     *
     * @param value1 被减数
     * @param value2 减数
     * @return 两个参数的差
     */
    public static double sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();
    }

    /**
     * 提供精确乘法运算的mul方法
     *
     * @param value1 被乘数
     * @param value2 乘数
     * @return 两个参数的积
     */
    public static double mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }

    /**
     * 提供精确的除法运算方法div
     *
     * @param value1 被除数
     * @param value2 除数
     * @param scale  精确范围
     * @return 两个参数的商
     * @throws IllegalAccessException
     */
    public static double div(double value1, double value2, int scale) throws IllegalAccessException {
        //如果精确范围小于0,抛出异常信息
        if (scale < 0) {
            throw new IllegalAccessException("精确度不能小于0");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        //默认保留两位会有错误,这里设置保留小数点后4位
        return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
}

3 报错Service not registered

执行UnBindService时报错Service not registered

服务未注册,其实就是要先bindService(),才可以运行UnBindService();

4 当界面上面有EditText时 进入界面会弹出软键盘,在manifest中注册这个Activity里面加上这两行代码

5、权限报错java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE cmp=com.huawei.camera/.ThirdCamera } from ProcessRecord{d9cfe43 20572:ldx.cam_01/u0a514} (pid=20572, uid=10514) with revoked permission android.permission.CAMERA我要做的是一个拍照的demo本来不需要申请权限,我想着后面可能会用到就直接给加上了,结果就报这个错,把权限注释掉就可以了!

6、android 6.0之后运行时需要权限,只在AndroidManifest中申请权限不行,需要在代码中判断是否有权限,没有的话要再次申请权限,即加上如下代码(以读取文件为例):

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }

再附上一个报的错误:ava.io.FileNotFoundException: /storage/emulated/0/temp.png: open failed: EACCES (Permission denied) 注意:如果是Permission denied可能就是没有申请到权限

7、Android studio 字符串换行用"\n"————年纪大了脑子不好使,这都要记下来。。。

截取字符串subString:String ss=“这是需要被截取的字符串”

String s1=ss.subString(a,b);a,b是两个数值是字符串的起始位置和结束位置的索引,左闭右开。

8、获取当前日期的前几天或后几天的日期:这个是转的别人的

/**
 * 获取前n天日期、后n天日期
 *
 * @param distanceDay 前几天 如获取前7天日期则传-7即可;如果后7天则传7
 * @return
 */
public static String getOldDate(int distanceDay) {
    SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
    Date beginDate = new Date();
    Calendar date = Calendar.getInstance();
    date.setTime(beginDate);
    date.set(Calendar.DATE, date.get(Calendar.DATE) + distanceDay);
    Date endDate = null;
    try {
        endDate = dft.parse(dft.format(date.getTime()));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    //Log.i(TAG, "getOldDate: " + dft.format(endDate));
    return dft.format(endDate);
}

9、在方法的最后返回值那块代码不能通过做判断去设置返回值,这样会始终只走最后一个return,应该重新赋值最后只有一个return

    Boolean b=Date.contains("|");
        List list3=new ArrayList<>();
        if (b) {
           list3=list1;
        }
        if (!b){
           list3=list2;
        }

        return list3;
    }

10、如果想替换掉ArrayList中的某一项,可以使用方法list.set(i,String);

11、

解决请求筛选模块被配置为拒绝包含的查询字符串过长的请求

方案1: 在程序的web.config 中system.web 节点 里面插入   代码。再次运行,失败

方案2:对IIS 中的applicationHost.config 配置文件进行配置。再次运行,失败

方案3:在程序的web.config 中sconfiguration 节点 里面插入







 代码。再次运行,失败

不行!头有点大。。经过一番尝试后发现终极解决办法:

就是 方案1 + 方案3 的结合体,再次尝试,运行通过。

以上解决办法 是复制的别人的!

12、这个问题是一个困扰我很久的问题,有时候就连接不上服务器,报错是这个:

java.net.ConnectException: failed to connect to /192.168.1.108 (port 8088) after 10000ms: isConnected failed: EHOSTUNREACH (No route to host)

找到的答案1:找不到去往主机的路由。意思就是网络暂时被堵了。

13、Error:Cannot locate factory for objects of type DefaultGradleConnector, as ConnectorServiceRegistry has been closed.

去了趟厕所回来报这个错,解决办法:

File->Invalidate Cache/ReStart即可

14、在使用文件选择器lFilePicker时 只能查看很少的文件,反正不是手机中所有的文件,找了半天发现原因是lFilePicker文件选择器,没有自动获取权限

if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}

15、ProgressDialog 不显示:我这次遇见的问题是  开启的子线程是实现的Runnable接口,继承Thread类就可以了。具体是为什么我也不太清楚,如果您知道,欢迎您留言告知,谢谢——2019年7月6日

16、最近项目进厂调试,用了十几个手机都没有问题,有一个工程师手机打开APP就闪退,报错android.view.InflateException: Binary XML file line #9: Binary XML file line #9: Error inflating class TextView,刚开始只知道问题出在TextView ,在网上查询了很多资料,有是因为设置属性时Color,有是Drawable,后来排查属性时发现是TextSize属性导致的,我是在用dimens设置字体大小,后来想到是不是我的dimens没有为这个屏幕尺寸设置对应的dimens,果断获取当前手机的尺寸,新加values ——>bingo,解决问题!——2019年7月17日

17、Unable to start activity ComponentInfo{com.example.chapter01_01/com.example.chapter01_01.chapter4.SimpleUseFragment}: android.view.InflateException: Binary XML file line #10: Binary XML file line #10: Error inflating class fragment

造成这个错误的原因有很多。我的是因为没有为fragment指定ID--!——2019年10月20日

18、Android 布局被华为手机的下方的虚拟按键挡住

    我遇见过两次这个问题,都是ScrollView 第一次ScrollView的父布局是LinearLayout,我设置了这两个属性就可以了

   

第二次 scrollView的父布局是ConstraintLayout,设置这个属性不管用。后来将scrollView的底部constrain在父布局的底部 就没有这个问题了。如下代码:

  

这个情况是我scrollView的父布局 就是最外部的布局。其实将scrollView放在一个线性布局中,将线性布局与最外层布局绑定,也可以解决这个问题。

19、NumberPicker 二级联动或三级联动时,当父级Np变化时 对应的子级Np也跟着变化,子级数量不确定时,就是说,子级的数量会根据父级的变化而变化时,会报错数据越界,这里先记录一下解决办法,具体原因,以后再深究,try里面的代码是解决办法。

 np_DeviceName.setOnValueChangedListener((picker, oldVal, newVal) -> {
                /*
                 * 同一个设备有多个设备编码时就会报错
                 * */
                List tmp_DeviceCodeList = get_tmp_DeviceCodeList(arr_DeviceName[newVal], list1);
                String s = arr_DeviceName[newVal];
                arr_DeviceCode = new String[tmp_DeviceCodeList.size()];
                for (int i = 0; i < tmp_DeviceCodeList.size(); i++) {
                    arr_DeviceCode[i] = tmp_DeviceCodeList.get(i).toString();
                }
                try {
                    if (arr_DeviceCode.length - 1 > np_DeviceCode.getMaxValue()) {
                        np_DeviceCode.setDisplayedValues(arr_DeviceCode);
                        np_DeviceCode.setMaxValue(arr_DeviceCode.length - 1);
                    } else {
                        np_DeviceCode.setMaxValue(arr_DeviceCode.length - 1);
                        np_DeviceCode.setDisplayedValues(arr_DeviceCode);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.i(TAG, "iniBaseView: ");
                }
                /*当NumberPicker的值得数量发生变化时 会出问题,所以必须放这个*/
            });

 

你可能感兴趣的:(AS)