持续更新,以便查阅
1:cant resolve sympbol RecyclerView
说明添加的依赖有问题,按照路径D:\ANDROIDSDK\extras\android\m2repository\com\android\support\recyclerview-v7,看自己sdk中实际有什么依赖来看 去添加依赖。
红框内这一项要和电脑中的版本对应上。还有一种情况是:程序中没有加载上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的值得数量发生变化时 会出问题,所以必须放这个*/
});