java枚举在android项目应用
今天修复一个公司非常早曾经的android应用功能,里面的代码逻辑已经全然错乱,然后发现返回的数据全然不正确了。然后修复了整整两天。然后我又一次整理了一遍,重构就算不上了。
然后就用上了枚举。
什么是枚举?我曾经也不懂,当时我看见公司的项目中使用了枚举当做项目一个控制,比方改动已经写好的app然后为一些手机厂商做定制版。可能要去掉广告,还有跳转到商店url都不同,特别是国内基本都没有google play。我们为了避免以后的改动。就会写个枚举来控制它。
public enum Market { Default,Huawei(){
@Override
public String getMarketUrl() {
return "http://play.huawei.com";//huawei market url
}
},ZTE(){
@Override
public boolean isShouldAd(){
return false;
}
@Override
public String getMarketUrl() {
return "http://play.zte.com";//ZTE market url
}
},OneTouch(){
@Override
public String getMarketUrl() {
return "http://play.huawei.com";
}
}; public boolean isShouldAd(){
return true;
} public String getMarketUrl(){
return "http:\\googleplay....";//google play url
}
}
通过上面的样例就大概了解了一些java枚举在android的基本使用。
为了了解java枚举的原理,我写了一个非经常常使用的红绿灯样例。以下是用枚举的代码:
public enum TrafficLight { red(45) {
@Override
public TrafficLight nextLamp() {
return green;
}
},
green(30) {
@Override
public TrafficLight nextLamp() {
return yellow;
}
},
yellow(3) {
@Override
public TrafficLight nextLamp() {
return red;
}
}; private int time; private TrafficLight(int time) {
this.time = time;
}; public abstract TrafficLight nextLamp(); public int getTime() {
return this.time;
}
}
然后是普通class模拟enum的代码:
public abstract class TrafficLight { public static final TrafficLight red = new TrafficLight(45){
@Override
public TrafficLight nextLamp() {
return green;
}
};
public static final TrafficLight green = new TrafficLight(30) {
@Override
public TrafficLight nextLamp() {
return yellow;
}
}; public static final TrafficLight yellow = new TrafficLight(3) {
@Override
public TrafficLight nextLamp() {
return red;
}
}; private int time; private TrafficLight(int time) {
this.time = time;
}; public abstract TrafficLight nextLamp(); public int getTime() {
return this.time;
}
}
通过两个比較,就会发现,事实上枚举就是普通的java类。仅仅是私有了构造方法,然后提供了几个static final 的实例变量。
当然enum还提供一些其它方法。
比方:TrafficLight.green.name()还是很好用的。
这些都是enum的一些基本应用。然后是我今天在项目怎样应用用枚举的类型的。由于我们那个app有三个不同的请求数据的url。
事实上我们仅仅有一个数据源,假设find不到。就会通过其它两个是读取其它站点html。然后解析,通过正則表達式匹配得到数据。每一个数据源须要设置httpClient、httpGet、httpResponse等參数,然后使用了枚举。
我这里贴出一点主要的。然后发现事实上都是差点儿相同的。
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient; public enum RequestedProvider { mySelf() {
@Override
public String getUrl(String keyWord) {
return "http://..." + keyWord + "...";
}...
},
google() {
@Override
public String getUrl(String keyWord) {
return "http://google..." + keyWord + "...";
}...
},
amazon() {
@Override
public String getUrl(String keyWord) {
return "http://amazon..." + keyWord + "...";
}...
}; public abstract String getUrl(String keyWord); public HttpClient pickHttpClient() {
return new DefaultHttpClient();
} public HttpGet pickHttpGet(String url) {
return new HttpGet(url);
} public HttpResponse pickHttpResponse(HttpClient client, HttpGet get) {
HttpResponse res = null;
try {
res = client.execute(get);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}... }
今天就写到这了。ye!
java枚举在android项目应用的更多相关文章
- 使用Gradle构建Android项目
阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...
- eclipse — 导入android项目后识别成java项目的问题及解决
最近在eclipse导入android项目的时候遇到了奇葩问题,再此记录 遇到的问题就是:将完好的android项目导入到eclipse的时候,原本这是一个很容易的事情,但是导入成功后发现,,,靠ec ...
- 在Android项目中启用Java 8的部分特性--Lambda & Method References
Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...
- eclipse或adt-bundle创建的android项目没有自动生成MainActivity.java和activity_main.xml等文件解决办法
以前我电脑一直以来都是用的eclipse3.7来开发android项目的,创建android项目也能正常生成MainActivity.java和activity_main.xml等文件.后来不知道什么 ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- java常量类的实现方式_枚举类_项目实践
前言 众所周知,系统里有很多比如订单状态.审核状态:性别.结算方式.交易类型等属性,这些属性只有几个值,一般用0.1.2.3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状 ...
- 我的Android进阶之旅------>Android项目运行报java.lang.NoClassDefFoundError错误的解决办法
今天在运行一个Android项目的时候,报了以下错误: D/AndroidRuntime( 3859): Shutting down VM E/AndroidRuntime( 3859): FATAL ...
- Java进化? Kotlin初探与集成Android项目
欢迎Follow我的GitHub, 关注我的CSDN. Kotlin是基于JVM的编程语言, 由JetBrains公司开发, 眼下已经开源. IntelliJ IDEA, PyCharm, Andro ...
- Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...
随机推荐
- BZOJ 2555: SubString 后缀自动机_LCT
很水的一道题,就是有些细节没注意到. 比如说将调试信息误以为是最终结果而多调了20分钟QAQ ..... 我们注意到,每新加一个节点,改变的是该节点沿着 Parent 走一直走到根节点. 对应的,在 ...
- iOS面试总结(待完善)
闲的没事总结一下面试资料,先列个大纲,然后慢慢填充,一步步完善,反正也不急. 1.基本属性 2.KVC与KVO 3.代理与block 4.多线程:NSThread,GCD,NSOperation 5. ...
- CodeForces-722C Destroying Array 并查集 离线操作
题目链接:https://cn.vjudge.net/problem/CodeForces-722C 题意 给个数组,每次删除一个元素,删除的元素作为一个隔断,问每次删除后该元素左右两边最大连续和 思 ...
- 用shell写一个简单DHCP配置脚本
轩轩写的这个小脚本,主要是可以进行对dhcp服务的安装.简单配置.开启.关闭/查看状态等情况 使用呢非常简单,按照步骤进行准确的设置就可以啦 #!/bin/bashyum -y install dhc ...
- 题解 洛谷 P3381 【【模板】最小费用最大流】
发了网络流,再来一发费用流 能做费用流的,网络流自然做得来,但在这还是不要脸的安利一下自己的博客(里面也有网络流的题解): 点我 扯远了... 费用流,就是在不炸水管的情况下求源点到汇点的最小费用. ...
- logstash-shipper.conf
input { file { path => '/data/rsyslog/*/*/*.log' start_position => 'beginning' sincedb_path =& ...
- Mysql学习总结(29)——MySQL中CHAR和VARCHAR
MySQL数据库的字符(串)类不要以为字符类型就是CHAR,CHAR和VARCHAR的区别在于CHAR是固定长度,只要你定义一个字段是CHAR(10),那么不论你存储的数据是否达到了10个字节,它都要 ...
- securefx连接linux后文件夹中文乱码问题解决
首先在选项中设置字符编码为UTF-8 然后在全局选项中找到Securefx的配置文件 进入到该目录中,选择“Sessions”: 在“Sessions”中找到链接地址的ini文件,并用文本编辑器打开: ...
- Mac OS X10.10_xcode6.1_ios8.1环境下,编译lame静态库libmp3lame.a,支持arm64 armv7s x86_64 i386 armv7指令集
近期升级了系统到Mac OS X 10.10 而且更新了XCode6.1和iOS 8.1 之前app用到的libmp3lame.a静态库.也要支持64位的模拟器(x86_64)和64位的真机(arm6 ...
- 我在SharePoint行业的从业经历(一)
大约10年前,我刚刚毕业的时候,找到了一个试用的机会.那个时候的我对软件根本没有概念.编程学的也非常少.仅仅是在系里学过一点VB和C++,以为软件就是像QQ或者游戏之类的.我从来没想到会认 ...