bcoder

12月 272016
 

  Zxing是一个可以实现条形码和二维码扫描的开源代码,现在利用Android Studio可以很方便的集成该代码库。下面是详细的使用步骤:

一、通过Gradle将Zxing集成到你的项目中

  打开项目中的主build.gradle文件,将以下代码添加到dependencies节点中,然后点击编辑器右上角的Sync Now按钮

  效果如下图所示

 

二、为执行代码添加按钮

  在你的Activity设计窗体中放置两个按钮,分别对应条码和二维码的操作,设置它们的onClick事件分别为onScanBarcode和onScanQrCode,代码如下:

三、扫描代码的实现

  调用Zxing很简单,创建一个IntentIntegrator对象并设置相应的属性,然后调用该实例的initiateScan方法即可打开手机摄像头开始扫描。示例代码如下

  如果调用相机不成功,可以尝试在AndroidManifest.xml中添加相机的使用权限:

四、获取扫码结果

  我们可以在onActivityResult中获得扫码的结果,通过IntentResult实例来接收扫描结果,代码如下:

五、该例的java全部java代码

  执行结果的截屏如下图:

六、其他注意事项

IntentIntegrator有两个方法是forFragment和forSupportFragment应该是用于支持Fragment和支持库版本的Fragment,如果需要在Fragment中使用Zxing可以研究一下。

12月 182016
 

  为TextView设置高度为wrap_content后,TextView中的内容很多时,就会自动往下占用空间,但是设置Maxheight属性后,又不能查看全部的文字内容,这时候就需要使用TextView可滚动,下面就是设置MaxHeight并设置可滚动的代码。

 

 Posted by on 2016-12-18
11月 202016
 

1.必须设置setLayoutManager

2.在onCreateViewHolder方法中填充布局的时候,inflate的最后一参数必须为false

3.Adapter类的getItemCount方法返回的数量必须是大于0的数量

 Posted by on 2016-11-20
10月 272016
 

使用gson进行数据解析后,必须在混淆脚本中添加如下代码,如果不加的话json解析就会失败。

其中-keep class com.bcoder.test.datatypes.** { *; }这一行class和.**之间改成你的Bean类所在的包名

10月 272016
 

  我们知道,当app的屏幕进行旋转或者其他的配置变化的时候,Fragment会执行它的周期变化,重新创建Fragment并加载(除非设置了setRetainInstance(true)),那么在重建的时候Fragment中的变量就会被重新初始化,运行中的状态将无法保留。

  setArgument中的Bundle可以用来存放各种需要保持的数据,即使Fragment由于配置改变而重建,这些保存的数据也不会被清除。

  下面我们将通过一个实例来测试一下,在实例的Fragment中共有3个TextView和一个Button,为了使测试的内容更清晰,下面把三个TextView对应的字符串列表如下:

textview1->banana,   textview2->apple,   textview3->pear

  对应的三个字符串:

  • mParam1: 在Fragment.newInstance中传入,并保存在setArgument中,但是在点击按钮时未更新到Argument中
  • mParam2: Fragment中的私有变量,和Argument无任何交互
  • mParam3: 在Fragment.newInstance中传入,并保存在setArgument中,并且在点击按钮时更新到了Argument中

  测试程序的布局代码和java代码如下:

  Fragment部局文件的代码

  Fragment的Java代码

  主Activity的代码

  主Activity的布局文件代码

  程序启动时显示默认如下内容:

  textview1和textview3的值取自getArgument并显示在了屏幕上,当点击按钮时会重新给三个String变量赋值,并显示到textview中,如下图:

  这时三个字符串变量都有了新的值,那么当我们把屏幕进行一下旋转操作后,看结果如何呢?

  由图可知,字符串1回到了最初的状态(创建Fragment时传入的值),而字符串2被清除了。

  字符串3因为在点击按钮的时候重新被保存在getArgument中,而没有任何的变化的被保留下来了。

  因此大家在给Fragment传入参数的时候最好通过setArgument进行保存,而不是简单的通过一个变量进行保存。

注意:

  1. setArgument只能在Fragment中创建后(MyFragment fragment = new MyFragment())立即调用,如果在Fragment被附加到Activity中后再调用就会报错,可以在按钮的点击事件中添加一下setArgument的调用进行一下试验,应用将被异常终止。
10月 262016
 

测试环境Python3.5 + Mac

 

 Posted by on 2016-10-26
10月 202016
 

1.删除一行:

方法一:将光标定位到要删除的行,输入dd

方法二:输入1d,然后按回车键

2. 删除多行:

输入ndd删除多行,n为要删除的行数

3. 定位到行首:输入0

4. 定位到行尾:输入$

5. 进入到编辑模式:输入i

6. 进入到编辑模式,并新加行:输入o

7. 定位到文档起始位置:输入:1或者gg

8. 定位到文档结尾:输入:$或者G(大写)

9. 查找文字:输入/,然后输入要搜索的内容(区分大小写)

10. 查找下一个:执行上面的命令后,输入n查找下一个符合条件的内容

11. 替换文字:

:s/home/disk2/ 替换当前行第一个 home 为 disk2

:s/home/disk2/g 替换当前行所有 home 为 disk2

:n,$s/home/disk2/ 替换第 n 行开始到最后一行中每一行的第一个 home 为 disk2

:n,$s/home/disk2/g 替换第 n 行开始到最后一行中每一行所有 home 为 disk2

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

:%s/home/disk2/(等同于 :g/home/s//disk2/) 替换每一行的第一个 home 为 disk2

:%s/home/disk2/g(等同于 :g/home/s//disk2/g) 替换每一行中所有 home 为 disk2

12. 显示行号:输入:set nu

13. 跳转到某行:ngg,n为要跳转到行号

 Posted by on 2016-10-20  标签:
10月 202016
 

在mac os下ssh登录的时候出现了如下错误:

解决办法:在命令行执行如下命令

在打开的编辑器中删除相关的信息,按Esc,输入wq保存即可

9月 022016
 

基本使用方法:

命令格式:
watch [options] command

选项:
-b, –beep    播放提示音当命令返回非0退出代码
-c, –color     interpret ANSI color sequences
-d, –differences[=<permanent>]      高亮显示每次更新的变化内容
-e, –errexit    当命令返回非0的退出代码时退出watch命令
-g, –chgexit     当命令输出内容变化时退出watch命令
-n, –interval <secs>      watch执行时间间隔,单位秒,可以小为数,最小可以为0.1秒
-p, –precise     attempt run command in precise intervals
-t, –no-title     关闭顶部Every 2.0s:提示
-x, –exec pass command to exec instead of “sh -c”

-h, –help display this help and exit
-v, –version output version information and exit

For more details see watch(1).

使用场景:

  1. 用于定时执行某个命令
  2. 用于定时查看某些文件或者系统状态的变化

使用举例:

 

8月 292016
 

直接上代码

Calendar calendar = Calendar.getInstance();

//显示当前时间
System.out.println(calendar.getTime());

//各种日期格式化
SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);

String str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyyMMdd”);
str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyy/MM/dd”);
str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyy/M/d”);
str = format.format(calendar.getTime());
System.out.println(str);

//获取时间戳
str = String.valueOf(calendar.getTimeInMillis());
System.out.println(“时间戳: ” + str);

//减去一天
calendar.add(Calendar.DAY_OF_YEAR, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//减去一个月
calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//减去一年
calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//只获取日期,不包含时间
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//获取本月的第一天
calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//时间戳字符串转日期时间
calendar = Calendar.getInstance();
str = String.valueOf((calendar.getTimeInMillis() – 60 * 1000) ); //减去一分钟
calendar.setTimeInMillis(Long.parseLong(str));
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

 Posted by on 2016-08-29