2017/3/21 记载
1.《okhttp返回json数据:com.squareup.okhttp.internal.http.RealResponseBody@2b88614》
解决:
2.@responsebody表示该方法的返回结果直接写入HTTP response body中,所以springmvc有自动转化jso数据的功能
3.response.body().string()与response.body().toString()区别
Object.ToString() 是所有类的实例化对象,而sting()可以直接转化成string
4.RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西。
5.RelativeLayout相对布局是个人觉得在android布局中比较常用且好用的一个,当然如果想让布局更漂亮是需要多种布局混合搭建的,这里就需要更深入的学习了,在这只介绍下有关相对布局的东西。
6. margin与padding 的区别问题
padding是站在父view的角度描述问题,是自己的内容与其父控件的边之间的距离。margin则是站在自己的角度描述问题,自己与旁边的某个组件的距离,如果同一级只有一个view,那么它的效果基本上就和padding一样了。
2017.3.22 记载
在做学习中遇到的问题,并给予解决:
还有一个注解:三个值当中任一出现一个都可以与之对应。
@Expose注解属性serialize被设置成了false,暴露给Gson时可以忽略掉该属性
(2)这个问题最终没有解决
在做学习中遇到的问题,并给予解决:
1.命名
php和js在命名时一般采用下划线风格,而Java中一般采用的驼峰法,让后台的哥们改吧,反正前端和后台都不爽。2.Gson是怎么解决下划线和驼峰法的命名一一对应问题呢?
Gson在序列化和反序列化时需要使用反射,那就会想到注解,那么对于json中email_address这个属性对应POJO的属性则变成:@SerializedName("email_address")
public String emailAddress;
还有一个注解:三个值当中任一出现一个都可以与之对应。
@SerializedName(value = "emailAddress", alternate = {"email", "email_address"})
public String emailAddress;
@Expose注解属性serialize被设置成了false,暴露给Gson时可以忽略掉该属性
3.Gson如何解析变量,而不是一个serializable对象
(1)第一种方法是我将方法返回的类型改成object,返回回来还是它的值,而不是KeyValue结构,显然失败了。(2)这个问题最终没有解决
4.如何获取OKHttp3异步匿名内部方法onResponse的结果
Java的匿名内部类的使用限制是它只能访问外围类中的final成员,而Java中final对引用类型的语义是“这个引用在初始化之后不能用于指向别的对象”,至于被指向的对象的状态怎么变它不关心。所以在这个问题上,我花了很多时间,包括打了无数次断电确定都没值。通过使用双端阻塞队列(BlockingDeque)才解决这个取值问题。就个人而言,觉得OKHttp这方面没做充足。5.**BlockingDeque双端阻塞队列(BlockingDeque)取值问题
BlockingDeque只能通过takeFirst()取一次值,去第二次就会报错,因为队列当中已经没有该值了。
2017.3.23 记载
1.ThreadPoolExecutor
了解一下 JAVA 多线程(集合的多线程)Deque与LinkedBlockingDeque深入分析
2.Gson如何解析json字符串,并封装成List<T>
List<Course> coursesList = gson.fromJson(str,new TypeToken<List<Course>>(){}.getType());4.Toolbar布局被ListView布局给盖住的问题
将ToolBar布局的高度设置成wrap_content,并将其他的布局相对它的位置而设置5.web端获取不到session值
这个今天没时间了解到,因为web端和android端的session设置和传递、接收都不一样。需要深入了解一下其他文档2017.3.24 记载
完成了两个功能demo,遇到问题如下:其余未解决的问题,明天来解决1.解决泛型适配器的问题?(解决)
2.三元表达式不能直接在别的方法中直接用
viewholder.CourseName.setText("课程:"+evaluate.getCname()+"分数:"+evaluate.getResult()+"评价:"+evaluate.getContent()==null?"暂无评价":evaluate.getContent());
这样就会报错。
4.button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT)); 设置按钮透明颜色
2017.3.27 记载
1.点击退出键,销毁程序,销毁所有的活动。退出应用程序的实现:可以自己写个方法
例如网上有好几种写法:
/*finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);*/
网上查了很多方法,最常用的这个方法啊,效果都只能是退出当前活动回到上一个活动,而且推出之前还会黑屏一下,极为不爽啊。所以还是用最开始的方法来做这个功能,写一个活动栈,退出的时候将全部活动都移出就行了,具体代码已经总结好了
/*finish();
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);*/
网上查了很多方法,最常用的这个方法啊,效果都只能是退出当前活动回到上一个活动,而且推出之前还会黑屏一下,极为不爽啊。所以还是用最开始的方法来做这个功能,写一个活动栈,退出的时候将全部活动都移出就行了,具体代码已经总结好了
看博客:点击打开链接
public static void exit(int status) {
untime.getRuntime().exit(status);
}
这个方法是用来结束当前正在运行中的java虚拟机
System.exit(0)这个status=0是将你的整个虚拟机里的内容都停掉了
System.exit(1)这个status=1是用来表示这个程序是非正常退出。
.setMessage("确定要退出吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("返回", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
}).show();
2.点击back返回上一个activity(销毁当前activity)
默认直接调用finish方法3. System.exit(0)和System.exit(1)区别
android源码:public static void exit(int status) {
untime.getRuntime().exit(status);
}
这个方法是用来结束当前正在运行中的java虚拟机
System.exit(0)这个status=0是将你的整个虚拟机里的内容都停掉了
System.exit(1)这个status=1是用来表示这个程序是非正常退出。
4.弹框事件
new AlertDialog.Builder(BaseActivity.this).setTitle("系统提示").setMessage("确定要退出吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("返回", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
}).show();
2017.3.28 记载
1.做MPAndroidChart的使用
demo:再从数据库拿数据出来,导入 在做的过程中有很多问题,一是没接触过,得慢慢看源代码,二是本身逻辑方面需要改动很多,三是报错的次数蛮多的,不过直到下午这些问题都慢慢的得到解决了。demo也上传到GitHut上了。
tv.setTextColor(Color.WHITE);
android:label="@string/title_null"(title_null值为"")
compile 'net.qiujuer.genius:blur:2.0.0-beta4',相应的使用方法稍微了解了一下。
android:background="@null" 去掉粉红色下划线
2.实现当进入APP端时进入缓冲界面的效果图片
http://blog.csdn.net/x605940745/article/details/233814432017.3.29
1.Spinner选中文字颜色和下拉颜色不同的设置
TextView tv = (TextView) view;tv.setTextColor(Color.WHITE);
2.修正小Bug
(1)更新密码框隐形显示(解决)
android:inputType="textPassword"(2)填写账户的时候,需要点击两下才能出现清空图标(解决)
setOnFocusChangeListener()和onFocusChange(View v, boolean hasFocus)(3)除了第一个MainActivity没有系统标题外,其他都有,需要清除其他的标题文字。
在AndrandrManifest中修改各个注册的activity属性android:label="@string/title_null"(title_null值为"")
(4)显示评价列表时候,头像和评价文字不在一个水平线上,呈现垂直分布
将需要改动的空间放入LinearLayout布局中,并选择水平分布horizontal(5)尝试换一张模糊登录背景图
要么直接换成模糊照片,要么使用高斯模糊算法,导包compile 'net.qiujuer.genius:blur:2.0.0-beta4',相应的使用方法稍微了解了一下。
(6)EditText中的光标和下划线会变成粉红色,如何去除
android:textCursorDrawable="@null" 去掉粉红色光标android:background="@null" 去掉粉红色下划线
2017.3.30 记载
1.ListView子项计数的问题和上下刷新出现的Bug,采取折中的办法,在服务端进行处理,再返回数据到android客户端
for(int i=0;i<strings.size();i++){
StringBuffer sb = new StringBuffer(strings.get(i));
sb.insert(0, (i+1)+".");
strings.set(i, sb.toString());
//效率比str的subString方法效率高得多
}
2.listView后加控件的问题(因为用户会不断刷新,所以直接加控件会出现显示不出来的问题)
解决方案:直接加入在listView最后面LayoutInflater infla = LayoutInflater.from(this);
View footView = infla.inflate(R.layout.add_evaluate_button, null);
listView.addFooterView(footView, null, true)
addHeaderView()方法:主要是向listView的头部添加布局
addFooterView()方法:主要是向listView的底部添加布局
item 内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button、imagebutton等控 件抢走,从而导致在listview设置了onitemclick事件后不会被触发。解决方法是在初始化item的时候屏蔽掉其内部button等控件的 焦点获取
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
这样就能阻塞字控件抢夺焦点,listview的onitemclick就能被正确触发,同时对item内部的button等控件也没有影响,他们在被点击时照样可以触发自身的点击事件。
学习网站:点击打开链接
学习网站:点击打开链接
3.listview迭代出来的控件外部监听出异常
ListView和其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽。
在ListView加入的控件全局没有设置一个属性就可以了。
android:descendantFocusability="blocksDescendants"
2017.4.1 记载
1.androidAPP修改中文名称后,显示不出名字来
解决:问题在于,我在各个Activity下的lable标签都设置为空字符串了(前期为了解决活动标题的问题设置的)。activity中的lable优先级高于application中lable的优先级。当activity中没有定义lable标签时,application中的lable才会在activity lable标签中生效。去掉lable标签就可以了。
2.TextView中为什么会在有些行尾出现"..."字符
解决:手机的ROM问题,认真review了代码,发现如下的代码:mIntroView = (TextView) findViewById(R.id.description);
mIntroView.setEllipsize(TruncateAt.END);
3.出现错误:Installation error: INSTALLFAILEDINSUFFICIENT_STORAGE Please check logcat output for more details. Launch canceled!
解决:机器内存的瓶颈,当apk大于我们的机器内存时,将sdk的内存设置大一点儿就好了
4.开机运行服务器后,app连不上后台服务器
解决:通过检测发现是因为WIFI没开,因为WIFI没开,系统网络没有给wifi分配子网IP,导致app找不到本地服务器,开一下WIFI重启就好了。5.Android Studio 配置 androidAnnotations框架详细步骤:
解决: http://www.cnblogs.com/caobotao/p/5138935.html
2017.4.5 记载
2.Android string中translatable作用
意思就是不管系统是什么语言,它都只显示xx,通常用来表示定义一些开关项。
3.焦点管理器focusManager
hideFocus、showFocus、setFocus、getFocus作用也就是字面意思了。关于FocusManager的使用介绍:http://edu.gamfe.com/tutor/d/18178.html
当用户按 Tab 键在 Flash 应用程序中导航时或在应用程序中单击时,FocusManager 类会确定接收输入焦点的组件,我想这个3D相机应该就是通过这个实时去获取焦点,来改变视觉角度的。个人猜想
4.Android string中msgid=""作用
在源码中的id都会生产msgid,系统自己产生的随机生成的,随机的目的是为了不重复。然后每个字符串有个id,便于翻译。5.android点击ctrl键无法在关键字变量上跳转,我就想了这儿可能不说android studio的项目,就翻了一下目录结构,才发现这是用intellij idea写的项目,我又去下了这个软件,花了大量的时间进行相关的配置,最后才导入进来可以使用的,但是导入进来是一堆错误,我不期盼它能运行起来,就慢慢理解代码吧。
6使用Serializable和Parcelable两种方式传递Object
Android的Intent之间传递对象有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key,Object)。前者实现了Serializable接口,而后者实现了Parcelable接口。intent.putStringArrayListExtra("ListString",stringList);//传递List数据
7.IndicatorControlContainer聚焦组件
STATE_IDLE:空闲状态拍照 STATE_FOCUSING:自动正在聚焦,可聚焦完拍照,否则聚焦失败等有许多属性作用STATE_FOCUSING_SNAP_ON_FINISH、STATE_SUCCESS、STATE_FAIL
8.Android多媒体开发
学习链接:http://blog.csdn.net/reiliu/article/details/9060557可以用开源MediaFramework来进行开发,OpenCore是Android多媒体框架的核心,所有Android平台的音视频采集,播放的操作都是通过它来实现。当然这只是一种方式,有很多开发平台的。这部分完全没看懂
9.Android提供Media API给开发人员使用
MediaPlayer、MediaRecorder、Android MediaAPIs,目前了解的有这些APIAndroid为音频和视频操作分别提供了MediaPlayer类和MediaRecorder类这两个工具类
图像:
10.播放器监听事件setOnPreparedListener(new OnPreparedListener());
其中提供了可以设置比方暂停停止等时间的方法。11.简单的3D相机过程
(1)在android上创建OPenGL平面。(2)创建缓冲区。(3)创建着色器来负责单点绘制。(4)最后画出形状和图形,暂时知道有这几方面的内容。2017.4.6 记载
1.感觉在android学习方面还不够,网上查了一下,下载《Android开发艺术探索-任玉刚版》PDF下来看看
2.《软件框架设计的艺术》中写道"向后兼容"的思想
旧版本的API可以在新版本API上运行,几乎每一个API设计者都是希望做到这种地步,但是也意味着重要性和复杂度。**3.通配符(正则表达式)的使用
(1)\b:元字符,代表着单词的开头或结尾 (\bhi\b)(2),.是另一个元字符,匹配除了换行符以外的任意字符(\bhi\b.*\bhob\b) 这个时候的*代表数量
(3)\d是个新的元字符,匹配一位数字(0\d\d\d-\d\d\d\d\d或0\d{2}-\d{5}){重复次数}
(4)\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
(5)\w匹配字母或数字或下划线或汉字等(\ba\w*\b)
(6)\d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次,?重复零次或一次()
(7)元字符^匹配字符串的开始和$都匹配字符串的结束(^\d{5,12}$)
(8)想查找元字符本身的话,用转义符\(\*\.\,\\)
(9)[aeiou]就匹配任何一个英文元音字母,[.?!]匹配标点符号(.或?或!)()
(10)[0-9]代表的含意与\d就是完全一致,同理[a-z0-9A-Z_]也完全等同于\w()
(11)分枝条件‘|’,意思就是或。(例:0\d{2}-\d{8}|0\d{3}-\d{7} \(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8})
(12)分组'()':表示整体(例子:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?))
(13)反义:
\W:匹配任意不是字母,数字,下划线,汉字的字符
\S:匹配任意不是空白符的字符
\D:匹配任意非数字的字符
\B:匹配不是单词开头或结束的位置
[^x]:匹配除了x以外的任意字符
[^aeiou]:匹配除了aeiou这几个字母以外的任意字符
(14)后向引用用于重复搜索前面某个分组匹配的文本(\b(\w+)\b\s+\1\b:(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,最后那个\1重新又匹配一次)
(15)负向零宽断言;\b\w*q(?!u)\w*\b()
(16)小括号的另一种用途是通过语法(?#comment)来包含注释。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。
(17)贪婪匹配:a.*b搜索到aabab,懒惰匹配:a.*?b搜索到aab
4.Android Studio 不自动弹起代码提示功能解决办法 do not auto popup code completion
我升级了一下androidstudio后出现的这个问题,后来看到有个PowerMode,取消之后一切正常,看来是省电模式下禁用了这些功能,通过反射来实现代码的autoComplete是会增加CPU运算量2017.4.7 记载
1.通过广播检查网络状态(移动网络或者WIFI)是否可用
http://blog.csdn.net/mxiaoyem/article/details/50708052http://blog.csdn.net/caijunjun1006/article/details/9698461
http://blog.csdn.net/u011546655/article/details/42583819
http://blog.csdn.net/hejie322/article/details/8786402
2.写一个检查网络状态的工具类
已经上传到博客;地址:http://blog.csdn.net/mr_li13/article/details/69547685