毕设over🎈

保研结束之后就开始在家躺尸
躺了半个月学校发来夺命催毕设符
然后15天紧赶慢赶做出来了把我给累的
老规矩扔github存着了然后想着毕设还是先放私有库里吧
然后跑去申请了github的学生包
做学生真好嘻嘻嘻

把踩的坑记录下来真是太有必要了
做卡片校园的时候记下来的坑这次救了我好几命哈哈哈

  1. ConstraintLayout

    Android新特性介绍,ConstraintLayout完全解析 - 郭霖的专栏 - CSDN博客

  2. 安卓分辨率

    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项 - sarsscofy的专栏 - CSDN博客

  3. 控件长宽dp 字体大小sp

  4. draw9patch无敌!
  5. start:系统语言从左到右的话就是左,系统语言从右到左的话就是右。end反之。总之视系统语言而定!
  6. SnackBar如果把FloatingActionButton遮住了就用coordinatelayout(这是加强版的Framelayout)
  7. CoordinatorLayout 就是 FrameLayout Pro!
  8. AppBarLayout + ToolBar 最外面包上CoordinatorLayout
  9. recycleview实现list和grid的转换,依葫芦画瓢就可以实现list和stagger的转换了吧

    RecyclerView实现List布局到Grid布局切换

  10. MySQL数据库更新提醒

    Android中内容观察者的使用—- ContentObserver类详解 - qinjuning、lets go - CSDN博客

    android,内容观察者,数据库变化通知 - 韩亚飞yue31313韩梦飞沙(我是一个机器化的人) - CSDN博客

    Android简易实战教程–第二十一话《内容观察者监听数据库变化》 - 态度决定高度A=X+Y+Z - CSDN博客

    连接数据库的url - u010563350的博客 - CSDN博客

  11. AppBarLayout高度为250dp的时候视觉效果比较好

  12. 加密保护

    Android登录记住密码,AES加密保存密码 - wlwh90的专栏 - CSDN博客

    说说在 Android 中如何实现记住密码功能 - 生命不息,编程不止 - CSDN博客

  13. 卡片式折叠交互

    卡片式折叠交互效果 - s2421458535的博客 - CSDN博客

  14. Material Design

    MD风格的文本输入框

  15. android如何设置drawableleft导入的图片大小-CSDN论坛

  16. 如果界面设计和运行到手机上的不一样,检查一下两边的分辨率是否一致

  17. TextInputLayout用于输入密码时如果想要小眼睛(密码显示or隐藏)和左边的图标同时显示,把里面的TextInputEditText换成EditText即可

    TextInputLayout与TextInputEditText详解 - 默小铭的博客 - CSDN博客

  18. png或者jpg模糊的话就用svg啦!无敌!

    Android Studio 如何使用SVG矢量图_百度经验

  19. 点击软键盘回车完成登录等自定义操作

    Android 软键盘事件imeOptions响应 - liuweiballack的专栏 - CSDN博客

  20. ModelAndView.addObject(“au”,xxx);第一个参数不能叫ac啊!!被坑半天

  21. android内置了切换动画啦直接用,以前还自己写OTZ

    酷炫的Activity切换动画,打造更好的用户体验

    Android5.0之Activity的转场动画 - 江南一点雨的专栏 - CSDN博客

  22. 一箩筐UI库

    Android主流UI开源库整理

  23. 改Dialog的字体颜色

    AlertDialog更改按钮颜色 - cike978的博客 - CSDN博客

  24. 检测是否有网络

    android 判断网络是否可用 - 谢岩的博客 - CSDN博客

  25. cookie

    Cookie、Session、Token那点事儿(原创)

  26. 登录状态

    Android SharedPreferences保存登录状态 - shaomingshan的博客 - CSDN博客

    Android–SharedPreferences的存储和获取数据–案例《登录》 - lg_1996的博客 - CSDN博客

  27. 关闭所有活动,第一行代码pdf里的P195

  28. 双击退出程序

    Android小技巧:如何实现”再按一次退出程序”效果 - 专注分享 Android开发 干货 - CSDN博客

  29. 实现自动登录

    Android程序跳过登录界面直接进入主界面(自动登录) - eyckwu的博客 - CSDN博客

  30. 七牛云新建存储空间的时候取名字不要作死用英文大写(CardBox),创建完成后会自动变成小写,然后代码里如果用Auth.create(AccessKey, SecretKey).uploadToken("cardbox")会没有用,谁知道中间出了什么奇奇怪怪的问题哦,反正创建的时候直接用小写英文就没问题啦。

  31. AlertDialog.getButton一定要在AlertDialog.show()之后使用
  32. 客户端如果突然冒出了什么奇奇怪怪的问题,不要怀疑自己,来,让我们去找tomcat玩。
  33. mysql实现插入默认值效果要记得指定字段,比如insert into user_info(user_account,user_password) values('hishark','111111') 然后剩下的字段就都是默认值了,别忘记写第一个括号
  34. 卡片翻转

    实现翻转卡片的动画效果

  35. RecyclerView使用GridLayoutManager时item若无法居中,检查一下item的根结点width是否为match_parent

  36. EditText去除下划线android:background="@null"
  37. Gson简查

    Android:Gson解析–从简单数据到复杂数据

  38. xml取值用#{},jsp取值用${}。这里由于要在单引号里取值所以用${}。

    <!-- 查出user_info表里所有含有传入字符串的记录 -->
    <select id="User_SearchAllByNickname" parameterType="String" resultType="User"> 
            select * from user_info where user_nickname like '%${_parameter}%'
    </select>
    
  39. TextView固定字数

    Android Textview 显示固定字数 省略号表示多余部分 - lvi_166的博客 - CSDN博客

  40. EditText的imeOptions属性的更改可以更改软键盘回车的作用

    自定义软键盘中Enter键,及其相应事件 - xSTARx - ITeye博客

    Android监听软键盘回车事件 - 技术宅注定孤独 - CSDN博客

  41. 用eclipse的时候检查一万遍都找不出错误的话,来关闭一下全部标签页,你肯定有文件没有保存:)

  42. 哇AS真的是毛病,突然炸了,还好存github了妈蛋TUT,setting.gradle里面就一句include ':app'莫名其妙自己就不见了??
  43. 查关联表别忘了写表名啊智障!!
  44. 终于知道咋整了ffffffff*ck 感谢最后那位大哥呜呜呜呜TUT

    求助App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW - wuwei1378的博客 - CSDN博客

    android studio安卓项目出现Error: Default Activity Not Found错误无法编译的解决方案 - 猿哥爱码 - 博客园

    Error: Default Activity Not Found

    Default Activity not found · Issue #2 · googlesamples/android-CommitContentSampleIME

  45. FloatingActionButton改变颜色以及取消边框 ,bgTint改颜色 border=0取消边框,ripple是点击的颜色

    java - Android更改浮动操作按钮颜色 - 代码日志

    FloatingActionButton 完全解析[Design Support Library(2)] - Hongyang - CSDN博客

  46. 爱上新字体 Corbel

  47. fab滚动隐藏以及小菜单

    FloatingActionButton的滚动隐藏和弹出特效的实现 - w_kahn的博客 - CSDN博客

  48. AS新建Basic Activity的时候状态栏莫名其妙没颜色,用这句就ok了

    getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
    
  49. Toolbar去阴影

    Android 去掉toolbar阴影 - 每天进步一点就够了 - CSDN博客

    Toolbar去除默认title显示

    getSupportActionBar().setDisplayShowTitleEnabled(false);
    
  50. RadioGroup/RadioButton

    Android 如何获取RadioGroup选中RadioButton的内容 - Android开发-CXY的博客 - CSDN博客

  51. 布局文件里警告unknown attribute,老有些莫名其妙的问题,感觉就不该更新到3.2,是2.3.3不好用吗fuxxxxxxxxxxk,下面第三个方法有用!

    AndroidStudio Unknown attribute(在xml中没有了代码提示) - DeMon - CSDN博客

  52. 一下午报各种错嘻嘻AS辣鸡,最后重装sdk搞定,参照第三个链接的Seeker。不过最后一步我选的是do not import settings

    Android studio Error “Unsupported Modules Detected: Compilation is not supported for following modules”

    Unknown attribute android:layout_width, layout_height, id, gravity, layout_gravity, padding

    No IDEA annotations attached to the JDK 1.8 (C:...), some issues will not be found

  53. FloatingActionButton滑动消失后不再出现,把GONE改成INVISIBLE就好

    使用FloatingActionButton滑动消失后不再显示问题 - dreamsever的专栏 - CSDN博客

  54. 闲得发慌拿爸爸手机运行了一下,报错如下,暂时无解,华为可能有毒,做完了再研究。

    10-24 19:34:28.549 5756-6000/? E/DatabaseUtils: Writing exception to parcel
        java.lang.SecurityException: Permission Denial: reading com.huawei.android.launcher.LauncherProvider uri content://com.huawei.android.launcher.settings/favorites?notify=true from pid=16341, uid=10080 requires com.huawei.android.launcher.permission.READ_SETTINGS, or grantUriPermission()
            at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605)
            at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:480)
            at android.content.ContentProvider$Transport.query(ContentProvider.java:211)
            at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
            at android.os.Binder.execTransact(Binder.java:453)
    10-24 19:34:28.638 16489-16542/? E/linker: readlink('/proc/self/fd/28') failed: Permission denied [fd=28]
    10-24 19:34:28.638 16489-16542/? E/linker: warning: unable to get realpath for the library "/data/app/com.tencent.android.qqdownloader-1/lib/arm/libqqndkfile.so". Will use given name.
    10-24 19:34:28.680 16489-16542/? E/beacon: please set the channelID after call initUserAction!
    10-24 19:34:28.803 16341-16398/? E/linker: readlink('/proc/self/fd/85') failed: Permission denied [fd=85]
    
  55. mysql -V查看mysql版本,注意是大写V哦。

  56. utf8mb4才可以存emoji,emoji占四个字节。
  57. Toolbar不用自定义啦,直接好多方法可以设置返回按钮和标题OTZ。另外要用getSupportActionBar()的话记得先setSupportActionBar(toolbar);
  58. ViewPager实现卡片浏览最重要滴一点【The most important thing here is the attribute clipToPadding. When this is false, the ViewPager won’t cut off the views that we want to show partially and the current item will still be centered.】

    ViewPager cards inspired by Duolingo

    一分钟实现ViewPager卡片ViewPagerCards

  59. 所有的报错里面我最爱的就是空指针,啾咪。

  60. 要让viewpager里的每一个卡片可以翻页,要在adapter里进行操作。
  61. 感谢老哥救我于水火

    ViewPager如何获取当前的子view - 泡在网上的日子

  62. TextView根据字数自动调节字体大小

    Android根据文字长度自动调整字号的TextView - venusic的专栏 - CSDN博客

  63. 从某项目复制来的一张图片放到drawable自带了括号(v24),然后运行就报错OTZ 删了自己新建一个就没问题勒

  64. 卡片上的书签效果设置一个marginTop=-5dp就好啦,计划通。
  65. 不要自己想半天字体设置多大了,style自带贼多固定size直接用就好啦。

    style="@style/Base.TextAppearance.AppCompat.Body1"
    
  66. button.setVisibility莫名其妙报错,stackoverflow是万能的!

    AppCompatActivity.onCreate can only be called from within the same library group

  67. 我正式宣布张小琪是个傻逼,要用CoordinatorLayout,自带的根节点是ConstraintLayout,都是C开头然后没仔细看,所以fab的behavior没有用,以为是别地方出了bug,找了三个小时🙂智障🙂

  68. Gson解析复杂数据

    Android:Gson解析–从简单数据到复杂数据

    哎哟Gson真好用,string转json一句就好啦,不怕复杂数据了~

    //boxresult是从服务器端查询回来的result里拔出来的Box的信息,然后Box里还有User和TimeStamp所以再往里还得解析一下
    JsonObject boxJsonObject = new JsonParser().parse(boxresult).getAsJsonObject();
    
  69. Activity之间传递List,用到序列化。(记得每个bean都序列化)

    //BoxDetailActivity.class
    Intent intent = new Intent(BoxDetailActivity.this,BrowseCurrentBoxCardActivity.class);
    intent.putExtra("AllCards",(Serializable)cardList);
    -----
    //BrowseCurrentBoxCardActivity.class
    List<Card> cardList = (List<Card>)getIntent().getSerializableExtra("AllCards");
    
  70. 实现卡片打乱顺序查看功能,Collections真是太好用了嘎嘎

    Collections.shuffle(cardList);
    
  71. RecyclerViwdianji子项跳转Activity

    Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK - ZhangGeng’s Blog - CSDN博客

  72. EditText光标

    Android修改 EditText 中的光标位置 - wxilin2111的博客 - CSDN博客

  73. 经本人多次测试发现24dp是最适合toolbar的图标大小。

  74. RT

    Handler实现Adapter和Activity之间的通信 - 海涛高软 - CSDN博客

  75. stackoverflow是万能的,9patch右边只允许黑一条噢

    error: too many padding sections on right border

  76. 在adapter里直接startActivity的时候有时候会报错有时候又不会,报错的话加一句就好了。

    //报错
    android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
    //solution:startActivity前加一句
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    Calling startActivity() from outside of an Activity?

    在非Activity中使用startActivity:Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag

  77. FloatingActionButton动态设置图标用这句,只能用mipmap里的图片噢。

    fab_follow.setImageResource(R.mipmap.follow_png_01);
    
  78. 404了不要全怪汤姆猫,重启了四五次发现其实有报错啊哈哈…我爱报错报错爱我:)

  79. TextView.setText()里头不能放int,小细节注意一下。

    tv_followcount.setText(String.valueOf(followCount));
    
  80. AS里右键某张PNG格式的图片Create 9-patch file之后,.9.png会飘红,然后运行显示Duplicate resources,改个名字即可。

  81. 给各种控件加这一句就都可以有按的效果了哈哈哈哈哈舒服之前怎么给忘了

    style="@style/Base.Widget.AppCompat.ImageButton"
    
  82. 发送邮件的对话框里的EditText改成圆框比较好看

    android editText 自定义为圆角矩形背景 - 码农渣渣的博客 - CSDN博客

  83. 存储emoji的问题前几天没解决然后今天继续搞,因为用的mysql-front所以直接在可视化界面更改了字符集,把utf-8改为utf8mb4即可。但是这时候的问题是部分emoji可以存入,部分emoji存入会持续报错Incorrect string value: ‘\xF0\x9F\x98\x84’,查了查发现还要改mysql根目录下的一个配置文件,linux中是my.cnf,windows中是my.ini。

    【Mysql】存储emoji表情报错(Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F…’)的解决方案 - H__D - 博客园

    该错误的解决办法:Incorrect string value: ‘\xF0\x9F…’ for column ‘XXX’ at row 1 - 浪漫鼠 - CSDN博客

    我在my.ini中没有添加别人那么多,只在[client]中添加了default-character-set = utf8mb4,然后[mysql]和[mysqld]中的utf8改为utf8mb4即可。

    mysql+jdbc的emoji异常问题 - lymee的回答 - SegmentFault 思否

    然后切记大于5.1.13的connector不能加characterEncoding=utf8。

    jdbc的配置也没别人那么多,jdbc:mysql://localhost:3306/cardbox_database?autoReconnect=true就ok了。

    最后记得重启mysql啊!!‘net stop mysql57’ ‘net start mysql57’

  84. 当我的盒子里还有一张卡片的时候,我想删除盒子就会报错了,因为存在表关联,添加级联删除即可。也可以先清空盒子之后再删除,都行都行。

  85. mysql-front增加级联删除选这个就好了

  86. 以前没怎么用过游标今天突然要用到就头痛了我仿佛一个智障。不要直接BEGIN END啦这个要写在存储过程里头啊!!游标查询完所有结果之后报错no data - zero rows fetched,selected,or processed,加一句话就好啦!ps存储过程里记得每句都要加分号

    drop PROCEDURE if exists test;
    create procedure test()
    BEGIN
    create table temp_receiver_user(user_account varchar(255),user_password
    DECLARE  no_more_record INT DEFAULT 0;
    declare receiver_account varchar(255);
    declare cur_test CURSOR FOR select user_receiver from user_message,user_info where user_sender = 'robot003' and user_sender = user_info.user_account;  
    //这一句记得加
    DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_test;
    open cur_test;
    FETCH cur_test into receiver_account;
    WHILE no_more_record != 1 DO
     //这里是要做的事,爱干啥干啥
     select * from user_info where user_account = receiver_account;
     FETCH cur_test into receiver_account;
    END WHILE;
    CLOSE cur_test;
    END;
    
    call test();
    
  87. 及时止损,一个路子走不通立马换一条,死胡同钻太久还钻不出来就赶快回头。今日找BUG有感。

  88. 给ImageButton设置背景色一定要记得是backgroundTint,不要一不留神设置成background了,不然没有按钮效果啦。
  89. apk打包最后一步

    Android Studio 项目打包成apk时 Signature Version 的选择

  90. 啊!做完了!感动!BUG过两天中期答辩结束就开始找实习啦!

没什么用的总结:用了很多轮子,以后要学会自己造轮子。以及,好想学ios开发啊,学了就可以做APP给自己日常用了> <等明年开学入了mbp再来学着玩ε=ε=ε=(~ ̄▽ ̄)~