Archive for the ‘在路上’ Category

ViewPager 的点击监听与存在的误触问题

in 在路上

ViewPager 是不自带 onItemClickListener 之类的方法的,解决方案也很简单,就是在 PagerAdapter 的 instantiateItem 方法里为每个页面加上监听。这是业界通常的做法,但是为毛没一个人提到这样会产生误触问题呢Orz……虽然解决误触也不复杂啦,但是我还是纳闷为啥我之前搜都没有相关资料呢……所以我还是写下这篇帮助下会被此困扰的人吧。

ViewPager 的点击事件监听

public class StartViewPagerAdapter extends PagerAdapter {
    private List mListViews;
    private View.OnClickListener clickListener;

    public StartViewPagerAdapter(List mListViews,View.OnClickListener clickListener) {
        this.mListViews = mListViews;
        this.clickListener=clickListener;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {  
        container.addView(mListViews.get(position), 0);
        mListViews.get(position).setOnClickListener(clickListener);
        //TODO 后面解决误触的代码
        return mListViews.get(position);
    }
}

然后创建的时候把 clickListener 传进来就行,没啥好说的。
(更多…)

Android序列化中由于修改类的内容造成InvalidClassException的解决方案

in 在路上

好多年没写博文了,我果然没救了。不过这篇文章定义应该是符合并不是互联网里满大街的知识点的要求吧。

问题回顾

在我的Exlink2.0版本升级到2.1中,之前保存的规则信息全部被清空了,而我的规则信息是通过对象序列化存储的。经初步排查,报错信息为

java.io.InvalidClassException: com.xloger.exlink.app.b.c; Incompatible class (SUID): com.xloger.exlink.app.b.c: static final long serialVersionUID =86222585354990243L; but expected com.xloger.exlink.app.b.c: static final long serialVersionUID =-4642583507468338732L;

解决这个报错的方案网上有很多,但是尝试后并没有解决我的问题,因此写下这篇博文。

序列化与serialVersionUID

序列化就是将一个对象转换为一个字节序列(目的是能存储和传输对象)。而上面的InvalidClassException恰好就是在反序列化(将一个字节序列转换回一个对象)时会产生的。

而这个InvalidClassException的原因是这样的:在一个对象(比如继承自Rule类)与字节序列的相互转换中,必然需要一个标记来证明它是Rule类的对象,否则谁知道你是Rule类还是String类还是什么,那没法反序列化了。因此,Java规定了一个属性serialVersionUID来区分它们,这个属性是可以在你需要序列化的类里申明的,比如这样:

private static final long serialVersionUID=10086L;

设定为private是为了不被子类继承。当然了,大部分人会说我以前没写过serialVersionUID啊,都是继承了Serializable接口就没了啊,是的,当没有申明serialVersionUID的时候,JVM会自动地根据包名、类名、继承关系、非私有的方法和属性,以及参数、返回值等诸多因子计算出一个值。比如我的Exlink在2.0版本之前,它给我计算的这个值为86222585354990243L,而在2.1版本中我对Rule类做了一些修改,导致该serialVersionUID变成了-4642583507468338732L。因此虽然我做的改动并不会真的影响到反序列化,但是JVM依旧会认为这有问题,因此抛出了InvalidClassException。

Ok,解决方案很简单,为了兼容以前的版本,我仅仅需要在Rule类里把serialVersionUID定义为86222585354990243L,这样JVM在反序列化的时候依旧会把最新版的Rule和旧的Rule当成一个来处理了。

也许有人会纳闷一些兼容性的问题,首先分成向上兼容、向下兼容两种。假如我们的新版增加了一个属性比如age,向上兼容就是旧的客户端读取新的数据,这里JVM会自动把那些它不认识的数据忽略掉(比如age),所以只要不改动旧属性,不用担心向上兼容的问题。向下兼容是新的客户端读取旧的数据,对于新的属性都会为Java里该类型的默认值,比如null、0、false这些。哪怕你定义你的成员变量private int age=12,这里的值依旧是0。那想做向下兼容应该怎么处理呢,就是在读取数据之后进行检测,判断是旧版本后手动初始化,比如可以维护一个当前类的版本的变量来判断。或者Android可以直接读取程序的versionCode来作为判断变量。

(更多…)

我懂个P

in 在路上

前言(废话):本来秉承着我的博文一定要是“能解决不能轻易通过搜索引擎解决的问题”的,但是太久没更新了实在于心有愧,决定怒水一发!【虽然前几篇也很逗逼似乎……

天空是蓝色的,我的PPT也始终是一个款式的……自从在大一看过阿文的那部《PPT扁平化手册》后,做的所有PPT都是参考他的风格,但不得不说他的风格真的挺不错的。

于是乎,在“多媒体信息与技术”老师布置的给学校老师一个PPT模板的作业以后,我毅然决定造一个轮子!把这种扁平化风格PPT推广给大众!有需要的可以直接使用我制作的模板:

首页一号:

首页1号

另一种首页:

首页二号

第三种首页:

首页三号

咳咳,虽然我也觉得挺挫的,但没事我会慢慢改,欢迎提意见…….

(更多…)

萌哒哒的装系统教程

in 在路上

Update 2017-02-24:删减废话,突出重点。

虽然网上有铺天盖地的装系统教程,但是始终没有一个我满意的。身为一名好备胎,在必要时刻能写一份深入浅出的重装教程是有责任心的表现,嗯。

这篇教程的特点是易懂,完整,不误导,有情怀。
对于想了解这个过程的人,每部分都有详细的解释;对于只要立刻装好的人,看加粗部分就好了。(请仔细理解目录)

全文分成四部分:
1. 装系统需要的知识储备
2. 制作部分
3. 安装部分
4. 完成后的一些事情


一、装系统需要的知识储备

1.1 装什么系统?

系统类型:全球的电脑系统可以分成三种:微软公司的Windows系统、苹果公司的OS X系统、自由开源的Linux系统。

OS X装起来问题很多,不推荐非 Mac 用户安装。需要装Linux的想必也不需要我的教程。所以在这里我只介绍Windows。

市面上主要的Windows版本有:windows xp(2001年发售)、windows 7(2009年发售)、windows 8(2012年发售)、windows 8.1(2013年发售)、windows 10(2015年发售)。

xp:它是一个十多年前的系统,并且微软已经停止技术支持了,所以无论是功能上还是安全性方面都不应该选择它。除非你的电脑是十几年前的电脑,否则你没理由继续使用它。(我家七年前的台式机跑 win8 依旧很流畅,所以不存在担心电脑配置从而装 xp 这种理由)
win7 :你非要用我也不拦着你,没啥问题。反正我觉得 win10 比它好用多了。
win8、win8.1:全面被win10代替。
win10:推荐。无任何特殊需求者都可以选择它。

系统位数:当你选择好了系统之后,会发现每个系统都有32位跟64位两种(32位有时会被写成 X86,比如64位系统 C 盘都有一个 Program Files (x86) 文件夹,里面放的便是32位软件)。这个是根据 CPU 来的,64位的 CPU 就是一次可以计算64位,32位的 CPU 一次只能计算32位,所以当然是64位的 CPU 更快)。于是,假如你的电脑 CPU 是32位的,那你只能装32位的操作系统,假如你的电脑 CPU 是64位的,那你电脑既可以装64位系统,也可以装32位系统。
所以除非你电脑 CPU 是32位的或者内存只有2G(此时你更应该加个内存条),否则你都应该选择64位的系统。64位可以支持4G以上的内存,64位的运行速度更快,64位并不存在所谓的软件兼容性问题。
(ps:相反,现在有许多软件现在只有64位了,比如 ps。这样的话是无法在32位系统上使用的。)

正常电脑都是64位 CPU 了,不用想装64位系统就是了。

系统版本:Windows 系统都有很多版本,比如 win7 有家庭版、专业版、旗舰版等;win10 有普通版、专业版、企业版。装看上去最好的版本就是了,win7 装旗舰版,win10 装专业版。

总结:假如你不愿看上面那些介绍,那你可以选择 windows 10 专业版 64位。

(更多…)

© 2018 一隅 - Powered by Wordpress / Theme: Tabinikki