之前在学习的时候遇到了好多小坑,好在网上好多前辈提供了很多解决方案,为了记得牢一些,也顺便把以前的一些东西总结一下。有点抱歉之前忘记记录那些参考链接,重新搜也认不大出之前看是哪一篇文章…大家把这篇文章当成转载的好了,以后一定记录好那些参考过的前辈文章链接。
ListView之类的容器控件大家都挺常用的,有时候可能会遇到这种情况,给容器设定好布局,创建好对应Adapter后,发现ListView里面的item响应事件失效了。
原因就是事件响应的焦点被布局里面某个控件获取了,被它所消费掉。Button,ImageButton,CheckBox这些子控件都会将焦点获取到,消费掉点击事件,所以当往ListView里面添多个Button控件后,点击item时变化的是子控件,item本身的点击事件没有响应。
解决方法:
在布局上利用descendantFocusability属性设置父类控件与子类控件之间关于焦点的处理。
该属性是当一个为view获取焦点时,定义ViewGroup和其子控件两者之间的关系。
属性的值有三种:
**beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点**
通常我们用到的是第三种,即在Item布局的根布局加上
Android:descendantFocusability=“blocksDescendants”`
的属性就好了。
这个是前段时间敲代码的时候,可能是版本更新的原因,我突然发现新建handler后跑出几个陌生的方法:
Handler handler = new Handler() {
@Override
public void publish(LogRecord record) {
}
@Override
public void flush() {
}
@Override
public void close() throws SecurityException {
}
};
可是那些方法并不是我想要的,而原来的方法handlerMessage()不知跑去哪,找了一下,解决方法如下:
声明时添加多个android.os.
private android.os.Handler handler=new android.os.Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
把handler传给其他类时,记得要确定是两边的handler对象都是os.handler的,如果不是sendMessage方法就找不到。
这个是之前学习网络编程的时候,拿百度这个链接http://www.baidu.com去测试、发送网络请求,结果没有收到预想中返回的一串东西,还报了个错
[82854] BasicNetwork.performRequest: Unexpected response code 302 for http://www.baidu.com
解决方法:改成https://www.baidu.com后就可以了。
这个是启动Android Studio时遇到的坑,它会弹出:
adb not responding. you can wait more,or kill “adb.exe” process manually and click ‘Restart’
这个提示框,重启AS也没用,产生这个的原因是adb被占用,需要杀死adb进程后重启它才能解决,方法如下:
win+R进入dos窗口,进入adb.exe所在文件夹。先后执行adb kill-server和adb start-server指令,重复几遍。
或者
win+R cmd 回车
f: 回车
cd 文件夹名
adb kill-server
adb start-server
adb nodaemon server
输入netstat -aon|findstr “5037”可以看到进程号(PID号)
进入任务管理器,结束掉那个进程,重启AS
接下来说下找不到硬件设备这种情况,原因可能各种各样,手机没连接好阿、没有安装类似360助手阿、手机里开发者选项没设置好阿、还有小米的没有关闭MIUI优化阿之类的。
这个是个经常见到的情况,因为我的手机数据线插口有点松弛,偶尔会断开连接,有时拔出来再插进去数据线也解决不了。这个的解决方法是:
任务管理器->详细信息->找到手机连接调试的那个程序的进程程(比如我的是“360手机助手”)->然后把它关掉,拔出、重新插入数据线连接,这样就搞定了!
用Android studio 运行程序时一直报“Installation failed with message Failed to establish session”这个错误,经过资料查询,在开发者选项里关闭MIUI优化就好了!
这个错误是之前做VR视频播放的项目时遇到的,因为需要用到Bmob云平台存放数据,所以需要导入Bmob的SDK然后配置环境,当导入完编译之后,一播放视频就崩了,详细错误信息当初忘记记录下来了,大概意思是找不到需要的.so文件。
一开始想可能是自己配置Bmob的时候哪个步骤出了差错,于是重新配置,手动导入、gradle自动导入都搞不定。于是上网找,找了蛮久,试了好多种方式,最后发现不是导入Bmob出现错误,而是没有对应64位的某个so文件
项目里面有它说的这个so库文件,不过是32位的,而在存放64位so库的文件夹arm64-v8a里没有这个的对应文件。
解决方案也很简单,在build.gradle中加上,这句话的意思大概就是,告诉程序加载如下的so文件
defaultConfig {
......
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
这时会报错,因为gradle的配置中,并不知道是否要做操作系统的兼容,这时只要在gradle.properties文件中加上
Android.useDeprecatedNdk=true
就可以了。