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.** {*;} ...
随机推荐
- swift语言点评十六-Initialization && Deinitialization
initial value:必须初始化.不影响观察者 Classes and structures must set all of their stored properties to an appr ...
- RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构
1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...
- 解决vuex刷新页面数据丢失
1.前言 vue构建的项目中,vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效刷新,问题来了,vuex存储的数据只是在页 ...
- vue 事件上加阻止冒泡 阻止默认事件
重点 vue事件修饰符 <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提 ...
- C语言的常用printf打印占位符%d, %u, %f, %s, %c, %o, %x
占位符含义及用法 代码: #include <stdio.h> int main(int argc, char const *argv[]) { , b = -; // 默认10进制赋值 ...
- php nusoap类的使用、用法、出错 及说明
NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务它是一个开源软件,当前版本是 0.7.2 ,支 持 SOAP1.1 WSDL1.1 ,可以与其他支持 SOAP1. ...
- Linux ping 不通 域名 添加DNS
修改路由配置文件 vi /etc/resolv.conf # Generated by NetworkManager #NDS nameserver 192.168.32.2 redhat7 系统优化 ...
- Python学习简单练习-99乘法表
__author__ = 'ZFH'#-*- coding:utf-8 -*-for i in range(10): #外层循环,range(10),1-9 for j in range(1,i+1) ...
- CVE-2011-1473 tomcat
Per the bottom of: http://tomcat.apache.org/security-7.html#Not_a_vulnerability_in_Tomcat tweak you ...
- (六)storm-kafka源代码走读之PartitionManager
PartitionManager算是storm-kafka的核心类了,如今開始简单分析一下.还是先声明一下,metric部分这里不做分析. PartitionManager主要负责的是消息的发送.容错 ...