今天修复一个公司非常早曾经的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项目应用的更多相关文章

  1. 使用Gradle构建Android项目

    阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...

  2. eclipse — 导入android项目后识别成java项目的问题及解决

    最近在eclipse导入android项目的时候遇到了奇葩问题,再此记录 遇到的问题就是:将完好的android项目导入到eclipse的时候,原本这是一个很容易的事情,但是导入成功后发现,,,靠ec ...

  3. 在Android项目中启用Java 8的部分特性--Lambda & Method References

    Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...

  4. eclipse或adt-bundle创建的android项目没有自动生成MainActivity.java和activity_main.xml等文件解决办法

    以前我电脑一直以来都是用的eclipse3.7来开发android项目的,创建android项目也能正常生成MainActivity.java和activity_main.xml等文件.后来不知道什么 ...

  5. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

  6. java常量类的实现方式_枚举类_项目实践

    前言 众所周知,系统里有很多比如订单状态.审核状态:性别.结算方式.交易类型等属性,这些属性只有几个值,一般用0.1.2.3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状 ...

  7. 我的Android进阶之旅------>Android项目运行报java.lang.NoClassDefFoundError错误的解决办法

    今天在运行一个Android项目的时候,报了以下错误: D/AndroidRuntime( 3859): Shutting down VM E/AndroidRuntime( 3859): FATAL ...

  8. Java进化? Kotlin初探与集成Android项目

    欢迎Follow我的GitHub, 关注我的CSDN. Kotlin是基于JVM的编程语言, 由JetBrains公司开发, 眼下已经开源. IntelliJ IDEA, PyCharm, Andro ...

  9. Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

    前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...

随机推荐

  1. 用SqlDataReader返回多个结果集

    using System; using System.Data; using System.Data.SqlClient; namespace Northwind { class Program { ...

  2. React 第三天

    第三天 01:在组件中使用style行内对象并封装样式对象: CmtItem.jsx: import React from 'react' //第一层封装 将样式对象和UI结构分离 // const ...

  3. OpenJDK源码研究笔记(四)-编写和组织可复用的工具类和方法

    本篇主要讲解java.util.Arrays这个针对数组的工具类. 1.可复用的工具类和方法.  这个工具类里,包含很多针对数组的工具方法,如 排序.交换.二分查找.比较.填充.复制.hashcode ...

  4. 洛谷 P2734 游戏 A Game

    P2734 游戏 A Game 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该 ...

  5. 完毕乔布斯的梦想:一个免费wifi共享的乌托邦

    早在2007年推出iPhone时,乔布斯就提出这种如果:商业区与居民区的wifi路由器全民开放,实现与路人共享网络之便.能够想象,那算是一个wifi共享的乌托邦. 数年过去了,乔布斯的梦想依然没能全然 ...

  6. Python 入门学习 -----变量及基础类型(元组,列表,字典,集合)

    Python的变量和数据类型 1 .python的变量是不须要事先定义数据类型的.能够动态的改变 2. Python其中一切皆对象,变量也是一个对象,有自己的属性和方法 我们能够通过 来查看变量的类型 ...

  7. MapReduce中combine、partition、shuffle的作用是什么

    http://www.aboutyun.com/thread-8927-1-1.html Mapreduce在hadoop中是一个比較难以的概念.以下须要用心看,然后自己就能总结出来了. 概括: co ...

  8. iOS RegexKitLite 提取匹配的内容

            使用RegexKitLite正则表达式需要以下工作: 1.RegexKitLite官方网址(内含使用教程):http://regexkit.sourceforge.net/RegexK ...

  9. zoj_3735,dp,长沙站j题

    #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...

  10. js中作用域链的问题

    为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止 ...