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.** {*;} ...
随机推荐
- mysql中如何查看某个数据库或表占用的磁盘空间
查整个库的状态:select concat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size, concat(tru ...
- HDU-1083 Courses 二分图 最大匹配
题目链接:https://cn.vjudge.net/problem/HDU-1083 题意 有一些学生,有一些课程 给出哪些学生可以学哪些课程,每个学生可以选多课,但只能做一个课程的代表 问所有课能 ...
- SpaceVim配置中遇到的问题
这是一个不断更新的随笔,若遇到SpaceVim配置问题时,会添加项 字体乱码(linux企鹅乱码,tabline图标乱码等) git clone https://github.com/powerlin ...
- Android 解决TextVIew载入自己定义字体慢的问题
网上非常多自己定义字体样式的代码.都是告诉应该这样做: 在自己定义控件里写,可是这样写有问题,会随着界面里自己定义控件越多.Activity载入速度越慢,太多了easy造成内存泄露问题,由于你没创建一 ...
- input range 模拟滑块
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(一)
Precondition: hadoop 2.7.1 Nutch 2.3 hbase 1.0.1.1 / hbase 0.98.13 solr 4.8.1 Linux version 3.16. ...
- less09 判断语句
less //.mixin (@a) when (lightness(@a) >= 50%) { //255/2=127.5 // background-color: black; //} // ...
- hpuoj--校赛--考试来了(水题)
问题 C: 感恩节KK专场--考试来了 时间限制: 1 Sec 内存限制: 128 MB 提交: 475 解决: 112 [提交][状态][讨论版] 题目描述 很多课程马上就结课了,随之而来的就是 ...
- 面向对象(OOP)五大基本原则
书单 <Object-Oriented Analysis & Design with Application>:Grady Booch, 下载地址:object-oriented- ...
- VS C/C++ 调用lua库(编译出错)
导入 lua.h 之类的头文件后,编译含有Lua函数的时候,可能会出现如下错误: 1>main.obj : error LNK2019: 无法解析的外部符号_luaL_checkinteger, ...