Posts tagged java
Android平台开发概述
Dec 12th
如何从一个Java EE开发人员,转向到Android平台开发呢?其实很容易,这一点从我身上得到了验证,但是要做好,还是有一定难度的。
首先是下载Android SDK,地址是:http://developer.android.com/sdk/ (可能需要通过特殊方式访问),再启动我们的利器Eclipse,然后安装插件,在线安装的地址是:https://dl-ssl.google.com/android/eclipse/,配置好Android SDK的路径。
我只是简单的带过了配置过程,如果还有不明白的,需要详细的配置过程可以参考这个网址:http://news.congci.com/news/windows7-android-eclipse-adt
接下来的就可以创建一个Hello的工程,启动模拟器,开始我们快乐而苦闷的Android开发之旅了。我们先来了解几个概念。
1、Dalvik Virtual Machine
Dalvik虚拟机可以说是对应于Java虚拟机,但是二者之间是不同的。“JVM是一种堆栈机器,而Dalvik虚拟机则是基于寄存器的,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。”
2、Intent
这个对刚接触这个概念的人来说,有点抽象。不过我们可以做个设想,就是所有的程序都可以通过URL(Uniform Resource Locator,统一资源定位符)或者URI(Uniform Resource Identifier,统一资源表识符)来访问,对,在Android平台就是这样来实现了,当然现在有些其它平台也是这样设计的。
thunder://QUFodHRwOi8vd3d3LjE1My54ZG93(迅雷的下载地址)
qqdl://aHR0cDovL3d3dy4xNTMueGRvd25zLmN(QQ下载)
flashget://W0ZMQVNIR0VUXWh0dHA6Ly93d3c(Flashget下载)
http://www.herbertyang.com(网址)
我想此刻你可以理解到这样的请求已经在我们周围发生了,我们在大胆的想下云操作系统是否也可以这样实现呢?如果没错的话,以后就是浏览器的时代,当然浏览器的理解只是这个时代的范畴。
3、Activity
这个概念还好理解,Android的Activity与用户界面屏幕之间多为一对一的关系,Android应用程序包括多个Activity,Activity之间可以相互携带数据切换。
4、View
View可以理解成控件,常用的控件有:TextView, EditView, ListView, ImageView, TabHost, ViewGroup 等等。
当然还包括控件的布局View
- RelativeLayout:相对布局
- LinearLayout:线性布局
- FrameLayout:框架布局
- AbsoluteLayout: 绝对布局
学过Java SE的界面设计的话,这些应该比较好理解,只不过现在是把布局的Code写到了XML里面。
如何协作开发?
虽然到此还不能熟练的进行开发,不过这只是一个时间问题了。下面我们来讲解下如何进行协作开发,这个也是探索的最宝贵的经验。
我们还得讨论到三层架构,这个是我们分工协作的关键,也是我们能够井然有序的基本前提:
- 表现层:1、用户界面,2、交互
- 业务层:逻辑
- 数据层:1、访问SQLite/XML 2、Contacts 3、Web API 4、LBS
是的,和传统的Web开发模式是一样的。
参考文献
如何得到每天某时刻的时间戳
Nov 1st
public static long getDaybreakTime() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTimeInMillis();
}
其实代码是比较简单的,相信这段代码还是有很多用处的。
可以使用到的场景有:
- 设置在某一时刻之前,必须更新缓存里的数据;
- 在Quartz中,统计和分析昨天的数据;
- 合并某一天内发生的动态;
- ……
如何在Java中使用枚举
Oct 22nd
枚举(pascal) 随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,这种方法称为枚举方法,用这种方法定义的类型称枚举类型。
在没有使用枚举之前,我们可能会这样来定义变量:
private static final int GIRL = 0; private static final int BOY= 1;
这样一种实现的方式,看似好像很清晰,但是如果类型一多,类型的值就较难管理,而且在判断不同类型时,有较多的丑陋的代码,代码自然不够优雅。
下面来看下如何使用枚举。
可以这样来定义:
public enum GenderType {
Girl, Boy
}
利用枚举传递值:
public void updateGrade(long userId,GenderType gender);
这样传递的好处是,可以是参数的传入一定是正确的,是真实存在的类型值。
递归枚举:
for (GenderType g : GenderType.values()) {
System.out.println(g.name()); //得到枚举的名字
System.out.println(g.ordinal()); //得到枚举的序号
}
枚举和switch可以说是绝配:
for (GenderType g : GenderType.values()) {
System.out.println(g.name());
System.out.println(g.ordinal());
switch(g){
case Girl:
break;
case Man:
break;
}
}
比如:表示层传递参数值0,进入控制层,如何使用枚举呢?
if(GenderType.values().length>i){
GenderType.values()[i] //这样就得到了枚举类型
}
如果传递的是字符串”Girl”,就可以这样得到数据枚举:
GenderType.valueOf("Girl")
在Java中,把字符串转换成Unicode码
Jun 17th
我是碰到这样一样情况,由于我使用了jQuery.getScript(),来进行跨域,不过遇到有些浏览器的编码编码不一致,导致乱码。
这样处理的好处是,避免了乱码的问题。
只是服务器端的代码,和网上的代码一样,不过我加了个
StringUtils.leftPad()
方法处理,这样就解决了每个字符都转化为四位的Unicode编码,在浏览器端用 unescape(blogLoginInfo.nicknameUnicode.replace(/\\/g,”\%”)); 就可以解码。
服务器端转码代码如下:
/**
* 把字符转换成Unicode编码
* @param str
* @return
*/
public static String toUnicode(final String str) {
String result = "";
for (int i = 0; i < str.length(); i++) {
int charInt = str.charAt(i);
result += "\\u" + StringUtils.leftPad(Integer.toHexString(charInt), 4, "0");
}
return result;
}