Android开发常用的十几种工具类
2017-03-18 20:23
375 查看
1.缓存的工具类
packagecom.example.administrator.myapplication.activity.activity.utils;import android.content.Context;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 缓存的工具类:缓存服务器返回的json字符串
*/
public final class CacheUtils {
//缓存json
public static void saveCache(Context context,String url,Stringjson) throws Exception{
//文件名
String name = Md5Utils.encode(url);
//输出流
FileOutputStream fileOutputStream =context.openFileOutput(name, Context.MODE_PRIVATE);
//写数据
fileOutputStream.write(json.getBytes());
//关流
fileOutputStream.close();;
}
//读取json
public static String readCache(Context context,String url)throws Exception{
//文件名
String name = Md5Utils.encode(url);
FileInputStream fileInputStream =context.openFileInput(name);
ByteArrayOutputStream bos = newByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len = fileInputStream.read(buffer)) != -1){
bos.write(buffer,0,len);
}
String json = bos.toString();
bos.close();
fileInputStream.close();
return json;
}
}
----------------------------------------------------------------------------------------------------------------------
2.加密解密工具包
package com.niubility.oschina_pro.utils;import java.security.InvalidAlgorithmParameterException;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
/**
* 加密解密工具包
*/
public class CyptoUtils {
public static final StringALGORITHM_DES = "DES/CBC/PKCS5Padding";
/**
* DES算法,加密
*
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws InvalidAlgorithmParameterException
* @throws Exception
*/
public static String encode(String key, String data) {
if(data == null)
return null;
try{
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory =SecretKeyFactory.getInstance("DES");
//key的长度不能够小于8位字节
Key secretKey = keyFactory.generateSecret(dks);
&
4000
nbsp; Cipher cipher = Cipher.getInstance(ALGORITHM_DES);
IvParameterSpeciv = new IvParameterSpec("12345678".getBytes());
AlgorithmParameterSpec paramSpec = iv;
cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec);
byte[] bytes = cipher.doFinal(data.getBytes());
return byte2hex(bytes);
}catch(Exception e){
e.printStackTrace();
return data;
}
}
/**
* DES算法,解密
*
* @param data 待解密字符串
* @param key 解密私钥,长度不能够小于8位
* @return 解密后的字节数组
* @throws Exception 异常
*/
public static String decode(String key, String data) {
if(data == null)
return null;
try {
DESKeySpec dks = newDESKeySpec(key.getBytes());
SecretKeyFactory keyFactory =SecretKeyFactory.getInstance("DES");
//key的长度不能够小于8位字节
Key secretKey =keyFactory.generateSecret(dks);
Cipher cipher =Cipher.getInstance(ALGORITHM_DES);
IvParameterSpec iv = newIvParameterSpec("12345678".getBytes());
AlgorithmParameterSpec paramSpec =iv;
cipher.init(Cipher.DECRYPT_MODE,secretKey, paramSpec);
return newString(cipher.doFinal(hex2byte(data.getBytes())));
} catch (Exception e){
e.printStackTrace();
return data;
}
}
/**
* 二行制转字符串
* @param b
* @return
*/
private static String byte2hex(byte[] b) {
StringBuilder hs = newStringBuilder();
String stmp;
for (int n = 0; b!=null&& n < b.length; n++) {
stmp =Integer.toHexString(b
& 0XFF);
if (stmp.length() ==1)
hs.append('0');
hs.append(stmp);
}
returnhs.toString().toUpperCase();
}
private static byte[] hex2byte(byte[] b) {
if((b.length%2)!=0)
throw new IllegalArgumentException();
byte[] b2 = new byte[b.length/2];
for (int n = 0; n <b.length; n+=2) {
Stringitem = new String(b,n,2);
b2[n/2] =(byte) Integer.parseInt(item,16);
}
return b2;
}
}
--------------------------------------------------------------------------------------------------------------------
3. 写文件的工具类
package com.itcast.googleplay.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import android.os.Environment;
/**
*
* @author 写文件的工具类
*
*/
public class FileUtils {
public staticfinal String ROOT_DIR = "Android/data/"
+UIUtils.getPackageName();
public staticfinal String DOWNLOAD_DIR = "download";
public staticfinal String CACHE_DIR = "cache";
public staticfinal String ICON_DIR = "icon";
/** 判断SD卡是否挂载 */
public staticboolean isSDCardAvailable() {
if(Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())){
returntrue;
} else {
returnfalse;
}
}
/** 获取下载目录 */
public staticString getDownloadDir() {
returngetDir(DOWNLOAD_DIR);
}
/** 获取缓存目录 */
public staticString getCacheDir() {
returngetDir(CACHE_DIR);
}
/** 获取icon目录 */
public staticString getIconDir() {
returngetDir(ICON_DIR);
}
/** 获取应用目录,当SD卡存在时,获取SD卡上的目录,当SD卡不存在时,获取应用的cache目录 */
public staticString getDir(String name) {
StringBuildersb = new StringBuilder();
if(isSDCardAvailable()) {
sb.append(getExternalStoragePath());
} else {
sb.append(getCachePath());
}
sb.append(name);
sb.append(File.separator);
Stringpath = sb.toString();
if(createDirs(path)) {
returnpath;
} else {
returnnull;
}
}
/** 获取SD下的应用目录 */
public staticString getExternalStoragePath() {
StringBuildersb = new StringBuilder();
sb.append(Environment.getExternalStorageDirectory().getAbsolutePath());
sb.append(File.separator);
&nb
1bb8b
sp; sb.append(ROOT_DIR);
sb.append(File.separator);
returnsb.toString();
}
/** 获取应用的cache目录*/
public staticString getCachePath() {
File f =UIUtils.getContext().getCacheDir();
if (null== f) {
returnnull;
} else {
returnf.getAbsolutePath() + "/";
}
}
/** 创建文件夹 */
public staticboolean createDirs(String dirPath) {
File file= new File(dirPath);
if(!file.exists() || !file.isDirectory()) {
returnfile.mkdirs();
}
returntrue;
}
/** 复制文件,可以选择是否删除源文件 */
public staticboolean copyFile(String srcPath, String destPath,
booleandeleteSrc) {
FilesrcFile = new File(srcPath);
FiledestFile = new File(destPath);
returncopyFile(srcFile, destFile, deleteSrc);
}
/** 复制文件,可以选择是否删除源文件 */
public staticboolean copyFile(File srcFile, File destFile,
booleandeleteSrc) {
if(!srcFile.exists() || !srcFile.isFile()) {
returnfalse;
}
InputStreamin = null;
OutputStreamout = null;
try {
in =new FileInputStream(srcFile);
out =new FileOutputStream(destFile);
byte[]buffer = new byte[1024];
int i= -1;
while((i = in.read(buffer)) > 0) {
out.write(buffer,0, i);
out.flush();
}
if(deleteSrc) {
srcFile.delete();
}
} catch(Exception e) {
LogUtils.e(e);
returnfalse;
} finally{
IOUtils.close(out);
IOUtils.close(in);
}
returntrue;
}
/** 判断文件是否可写 */
public staticboolean isWriteable(String path) {
try {
if(StringUtils.isEmpty(path)) {
returnfalse;
}
File f= new File(path);
returnf.exists() && f.canWrite();
} catch(Exception e) {
LogUtils.e(e);
returnfalse;
}
}
/** 修改文件的权限,例如"777"等 */
public staticvoid chmod(String path, String mode) {
try {
Stringcommand = "chmod " + mode + " " + path;
Runtimeruntime = Runtime.getRuntime();
runtime.exec(command);
} catch(Exception e) {
LogUtils.e(e);
}
}
/**
* 把数据写入文件
*
* @param is
* 数据流
* @param path
* 文件路径
* @param recreate
* 如果文件存在,是否需要删除重建
* @return
是否写入成功
*/
public staticboolean writeFile(InputStream is, String path,
booleanrecreate) {
booleanres = false;
File f =new File(path);
FileOutputStreamfos = null;
try {
if(recreate && f.exists()) {
f.delete();
}
if(!f.exists() && null != is) {
FileparentFile = new File(f.getParent());
parentFile.mkdirs();
intcount = -1;
byte[]buffer = new byte[1024];
fos= new FileOutputStream(f);
while((count = is.read(buffer)) != -1) {
fos.write(buffer,0, count);
}
res= true;
}
} catch(Exception e) {
LogUtils.e(e);
} finally{
IOUtils.close(fos);
IOUtils.close(is);
}
returnres;
}
/**
* 把字符串数据写入文件
*
* @param content
* 需要写入的字符串
* @param path
* 文件路径名称
* @param append
* 是否以添加的模式写入
* @return
是否写入成功
*/
public staticboolean writeFile(byte[] content, String path, boolean append) {
booleanres = false;
File f =new File(path);
RandomAccessFileraf = null;
try {
if(f.exists()) {
if(!append) {
f.delete();
f.createNewFile();
}
} else{
f.createNewFile();
}
if(f.canWrite()) {
raf= new RandomAccessFile(f, "rw");
raf.seek(raf.length());
raf.write(content);
res= true;
}
} catch(Exception e) {
LogUtils.e(e);
} finally{
IOUtils.close(raf);
}
returnres;
}
/**
* 把字符串数据写入文件
*
* @param content
* 需要写入的字符串
* @param path
* 文件路径名称
* @param append
* 是否以添加的模式写入
* @return
是否写入成功
*/
public staticboolean writeFile(String content, String path, boolean append) {
returnwriteFile(content.getBytes(), path, append);
}
/**
* 把键值对写入文件
*
* @param filePath
* 文件路径
* @param key
* 键
* @param value
* 值
* @param comment
* 该键值对的注释
*/
public staticvoid writeProperties(String filePath, String key,
Stringvalue, String comment) {
if(StringUtils.isEmpty(key) || StringUtils.isEmpty(filePath)) {
return;
}
FileInputStreamfis = null;
FileOutputStreamfos = null;
File f =new File(filePath);
try {
if(!f.exists() || !f.isFile()) {
f.createNewFile();
}
fis =new FileInputStream(f);
Propertiesp = new Properties();
p.load(fis);//先读取文件,再把键值对追加到后面
p.setProperty(key,value);
fos =new FileOutputStream(f);
p.store(fos,comment);
} catch(Exception e) {
LogUtils.e(e);
} finally{
IOUtils.close(fis);
IOUtils.close(fos);
}
}
/** 根据值读取 */
public staticString readProperties(String filePath, String key,
StringdefaultValue) {
if(StringUtils.isEmpty(key) || StringUtils.isEmpty(filePath)) {
returnnull;
}
Stringvalue = null;
FileInputStreamfis = null;
File f =new File(filePath);
try {
if(!f.exists() || !f.isFile()) {
f.createNewFile();
}
fis =new FileInputStream(f);
Propertiesp = new Properties();
p.load(fis);
value= p.getProperty(key, defaultValue);
} catch(IOException e) {
LogUtils.e(e);
} finally{
IOUtils.close(fis);
}
returnvalue;
}
/** 把字符串键值对的map写入文件 */
public staticvoid writeMap(String filePath, Map<String, String> map,
booleanappend, String comment) {
if (map ==null || map.size() == 0 || StringUtils.isEmpty(filePath)) {
return;
}
FileInputStreamfis = null;
FileOutputStreamfos = null;
File f =new File(filePath);
try {
if(!f.exists() || !f.isFile()) {
f.createNewFile();
}
Propertiesp = new Properties();
if(append) {
fis= new FileInputStream(f);
p.load(fis);//先读取文件,再把键值对追加到后面
}
p.putAll(map);
fos =new FileOutputStream(f);
p.store(fos,comment);
} catch(Exception e) {
LogUtils.e(e);
} finally{
IOUtils.close(fis);
IOUtils.close(fos);
}
}
/** 把字符串键值对的文件读入map */
@SuppressWarnings({"rawtypes", "unchecked" })
public staticMap<String, String> readMap(String filePath,
StringdefaultValue) {
if(StringUtils.isEmpty(filePath)) {
returnnull;
}
Map<String,String> map = null;
FileInputStreamfis = null;
File f =new File(filePath);
try {
if(!f.exists() || !f.isFile()) {
f.createNewFile();
}
fis =new FileInputStream(f);
Propertiesp = new Properties();
p.load(fis);
map =new HashMap<String, String>((Map) p);//
因为properties继承了map,所以直接通过p来构造一个map
} catch(Exception e) {
LogUtils.e(e);
} finally{
IOUtils.close(fis);
}
returnmap;
}
/** 改名 */
public staticboolean copy(String src, String des, boolean delete) {
File file= new File(src);
if(!file.exists()) {
returnfalse;
}
FiledesFile = new File(des);
FileInputStreamin = null;
FileOutputStreamout = null;
try {
in =new FileInputStream(file);
out =new FileOutputStream(desFile);
byte[]buffer = new byte[1024];
int count = -1;
while((count = in.read(buffer)) != -1) {
out.write(buffer,0, count);
out.flush();
}
} catch(Exception e) {
LogUtils.e(e);
returnfalse;
} finally{
IOUtils.close(in);
IOUtils.close(out);
}
if(delete) {
file.delete();
}
returntrue;
}
}
[/b]
4.HTML操作相关工具类
package com.niubility.oschina_pro.utils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class HTMLUtil {
privatestatic final String regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>";//
定义script的正则表达式
privatestatic final String regEx_style ="<style[^>]*?>[\\s\\S]*?<\\/style>"; //
定义style的正则表达式
privatestatic final String regEx_html = "<[^>]+>"; //
定义HTML标签的正则表达式
private finalstatic String regxpForHtml = "<([^>]*)>"; //
过滤所有以<开头以>结尾的标签
public staticString delHTMLTag(String htmlStr) {
Patternp_script = Pattern.compile(regEx_script,
Pattern.CASE_INSENSITIVE);
Matcherm_script = p_script.matcher(htmlStr);
htmlStr =m_script.replaceAll(""); //
过滤script标签
Patternp_style = Pattern
.compile(regEx_style,Pattern.CASE_INSENSITIVE);
Matcherm_style = p_style.matcher(htmlStr);
htmlStr =m_style.replaceAll(""); //
过滤style标签
Patternp_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
Matcherm_html = p_html.matcher(htmlStr);
htmlStr =m_html.replaceAll(""); //
过滤html标签
returnhtmlStr.trim(); //
返回文本字符串
}
/**
* 基本功能:替换标记以正常显示
* @param input
* @return String
*/
public staticString replaceTag(String input) {
if(!hasSpecialChars(input)) {
returninput;
}
StringBufferfiltered = new StringBuffer(input.length());
char c;
for (int i= 0; i <= input.length() - 1; i++) {
c =input.charAt(i);
switch(c) {
case'<':
filtered.append("<");
break;
case'>':
filtered.append(">");
break;
case'"':
filtered.append(""");
break;
case'&':
filtered.append("&");
break;
default:
filtered.append(c);
}
}
return(filtered.toString());
}
/**
* 基本功能:判断标记是否存在
* @param input
* @return boolean
*/
public staticboolean hasSpecialChars(String input) {
booleanflag = false;
if ((input!= null) && (input.length() > 0)) {
charc;
for(int i = 0; i <= input.length() - 1; i++) {
c =input.charAt(i);
switch(c) {
case'>':
flag= true;
break;
case'<':
flag= true;
break;
case'"':
flag= true;
break;
case'&':
flag= true;
break;
}
}
}
returnflag;
}
/**
* 基本功能:过滤所有以"<"开头以">"结尾的标签
* @param str
* @return String
*/
public staticString filterHtml(String str) {
Patternpattern = Pattern.compile(regxpForHtml);
Matchermatcher = pattern.matcher(str);
StringBuffersb = new StringBuffer();
booleanresult1 = matcher.find();
while(result1) {
matcher.appendReplacement(sb,"");
result1= matcher.find();
}
matcher.appendTail(sb);
returnsb.toString();
}
/**
* 基本功能:过滤指定标签
* @param str
* @param tag
指定标签
* @return String
*/
public staticString fiterHtmlTag(String str, String tag) {
Stringregxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>";
Patternpattern = Pattern.compile(regxp);
Matchermatcher = pattern.matcher(str);
StringBuffersb = new StringBuffer();
booleanresult1 = matcher.find();
while(result1) {
matcher.appendReplacement(sb,"");
result1= matcher.find();
}
matcher.appendTail(sb);
returnsb.toString();
}
/**
* 基本功能:替换指定的标签
* @param str
* @param beforeTag
要替换的标签
* @param tagAttrib
要替换的标签属性值
* @param startTag
新标签开始标记
* @param endTag
新标签结束标记
* @return String
* @如:替换img标签的src属性值为![](属性值)
*/
public staticString replaceHtmlTag(String str, String beforeTag,
StringtagAttrib, String startTag, String endTag) {
StringregxpForTag = "<\\s*" + beforeTag +"\\s+([^>]*)\\s*>";
StringregxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";
PatternpatternForTag = Pattern.compile(regxpForTag);
PatternpatternForAttrib = Pattern.compile(regxpForTagAttrib);
MatchermatcherForTag = patternForTag.matcher(str);
StringBuffersb = new StringBuffer();
booleanresult = matcherForTag.find();
while(result) {
StringBuffersbreplace = new StringBuffer();
MatchermatcherForAttrib = patternForAttrib.matcher(matcherForTag
.group(1));
if(matcherForAttrib.find()) {
matcherForAttrib.appendReplacement(sbreplace,startTag
+matcherForAttrib.group(1) + endTag);
}
matcherForTag.appendReplacement(sb,sbreplace.toString());
result= matcherForTag.find();
}
matcherForTag.appendTail(sb);
returnsb.toString();
}
}
----------------------------------------------------------------------------------------------------------------------5. Http参数拼接工具类
package com.itcast.googleplay.utils;
import java.util.Map;
public class HttpUtils {
publicstatic String getUrlParamsByMap(Map<String, Object> map) {
if (map== null) {
return "";
}
StringBuffer sb = new StringBuffer();
for(Map.Entry<String, Object> entry : map.entrySet()) {
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s= sb.toString();
if(s.endsWith("&")) {
s =s.substring(0, s.length() - 1);
}
returns;
}
}
----------------------------------------------------------------------------------------------------------------------6.日志工具类
package com.itcast.googleplay.utils;
import java.util.List;
import android.text.TextUtils;
import android.util.Log;
import com.itcast.googleplay.conf.Constants;
/**
* @des 日志级别是LEVEL_ALL显示所有信息,包括System.out.println信息
* @des 日志级别是LEVEL_OFF关闭所有信息,包括System.out.println信息
* @updateAuthorTODO
* @updateTimeTODO
* @updateDesTODO
*/
public class LogUtils {
/** 日志输出时的TAG */
private staticString mTag = "GooglePlay";
/** 日志输出级别NONE */
public staticfinal int LEVEL_OFF = 0;
/** 日志输出级别NONE */
public staticfinal int LEVEL_ALL = 7;
/** 日志输出级别V */
public staticfinal int LEVEL_VERBOSE = 1;
/** 日志输出级别D */
public staticfinal int LEVEL_DEBUG = 2;
/** 日志输出级别I */
public staticfinal int LEVEL_INFO = 3;
/** 日志输出级别W */
public staticfinal int LEVEL_WARN = 4;
/** 日志输出级别E */
public staticfinal int LEVEL_ERROR = 5;
/** 日志输出级别S,自定义定义的一个级别 */
public staticfinal int LEVEL_SYSTEM = 6;
/** 是否允许输出log */
privatestatic int mDebuggable = Constants.DEBUGLEVEL;
/** 用于记时的变量 */
privatestatic long mTimestamp = 0;
/** 写文件的锁对象 */
privatestatic final Object mLogLock = new Object();
/**---------------日志输出,已固定TAG begin---------------**/
/** 以级别为 d
的形式输出LOG*/
public staticvoid v(String msg) {
if(mDebuggable >= LEVEL_VERBOSE) {
Log.v(mTag,msg);
}
}
/** 以级别为 d
的形式输出LOG*/
public staticvoid d(String msg) {
if(mDebuggable >= LEVEL_DEBUG) {
Log.d(mTag,msg);
}
}
/** 以级别为 i
的形式输出LOG*/
public staticvoid i(String msg) {
if(mDebuggable >= LEVEL_INFO) {
Log.i(mTag,msg);
}
}
/** 以级别为 w
的形式输出LOG*/
public staticvoid w(String msg) {
if(mDebuggable >= LEVEL_WARN) {
Log.w(mTag,msg);
}
}
/** 以级别为 w
的形式输出Throwable*/
public staticvoid w(Throwable tr) {
if(mDebuggable >= LEVEL_WARN) {
Log.w(mTag,"", tr);
}
}
/** 以级别为 w
的形式输出LOG信息和Throwable */
public staticvoid w(String msg, Throwable tr) {
if(mDebuggable >= LEVEL_WARN && null != msg) {
Log.w(mTag,msg, tr);
}
}
/** 以级别为 e
的形式输出LOG*/
public staticvoid e(String msg) {
if(mDebuggable >= LEVEL_ERROR) {
Log.e(mTag,msg);
}
}
/** 以级别为 s
的形式输出LOG,主要是为了System.out.println,稍微格式化了一下 */
public staticvoid sf(String msg) {
if(mDebuggable >= LEVEL_ERROR) {
System.out.println("----------"+ msg + "----------");
}
}
/** 以级别为 s
的形式输出LOG,主要是为了System.out.println */
public staticvoid s(String msg) {
if(mDebuggable >= LEVEL_ERROR) {
System.out.println(msg);
}
}
/** 以级别为 e
的形式输出Throwable*/
public staticvoid e(Throwable tr) {
if(mDebuggable >= LEVEL_ERROR) {
Log.e(mTag,"", tr);
}
}
/** 以级别为 e
的形式输出LOG信息和Throwable */
public staticvoid e(String msg, Throwable tr) {
if(mDebuggable >= LEVEL_ERROR && null != msg) {
Log.e(mTag,msg, tr);
}
}
/**---------------日志输出,已固定TAG end---------------**/
/**---------------日志输出,未固定TAG begin---------------**/
/** 以级别为 d
的形式输出LOG*/
public staticvoid v(String tag, String msg) {
if(mDebuggable >= LEVEL_VERBOSE) {
Log.v(tag,msg);
}
}
/** 以级别为 d
的形式输出LOG*/
public staticvoid d(String tag, String msg) {
if(mDebuggable >= LEVEL_DEBUG) {
Log.d(tag,msg);
}
}
/** 以级别为 i
的形式输出LOG*/
public staticvoid i(String tag, String msg) {
if(mDebuggable >= LEVEL_INFO) {
Log.i(tag,msg);
}
}
/** 以级别为 w
的形式输出LOG*/
public staticvoid w(String tag, String msg) {
if(mDebuggable >= LEVEL_WARN) {
Log.w(tag,msg);
}
}
/** 以级别为 e
的形式输出LOG*/
public staticvoid e(String tag, String msg) {
if(mDebuggable >= LEVEL_ERROR) {
Log.e(tag,msg);
}
}
/**---------------日志输出,未固定TAG end---------------**/
/**
* 把Log存储到文件中
*
* @param log
* 需要存储的日志
* @param path
* 存储路径
*/
public staticvoid log2File(String log, String path) {
log2File(log,path, true);
}
public staticvoid log2File(String log, String path, boolean append) {
synchronized(mLogLock) {
FileUtils.writeFile(log+ "\r\n", path, append);
}
}
/**
* 以级别为 e
的形式输出msg信息,附带时间戳,用于输出一个时间段起始点
*
* @param msg
* 需要输出的msg
*/
public staticvoid msgStartTime(String msg) {
mTimestamp= System.currentTimeMillis();
if(!TextUtils.isEmpty(msg)) {
e("[Started:" + mTimestamp + "]"+ msg);
}
}
/** 以级别为 e
的形式输出msg信息,附带时间戳,用于输出一个时间段结束点* @param msg 需要输出的msg */
public staticvoid elapsed(String msg) {
longcurrentTime = System.currentTimeMillis();
longelapsedTime = currentTime - mTimestamp;
mTimestamp= currentTime;
e("[Elapsed:" + elapsedTime + "]"+ msg);
}
public static<T> void printList(List<T> list) {
if (list== null || list.size() < 1) {
return;
}
int size =list.size();
i("---begin---");
for (int i= 0; i < size; i++) {
i(i +":" + list.get(i).toString());
}
i("---end---");
}
public static<T> void printArray(T[] array) {
if (array== null || array.length < 1) {
return;
}
int length= array.length;
i("---begin---");
for (int i= 0; i < length; i++) {
i(i +":" + array[i].toString());
}
i("---end---");
}
}
----------------------------------------------------------------------------------------------------------------------7.Md5算法工具类
packagecom.example.administrator.myapplication.activity.activity.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Utils {
public staticString encode(String password){
try {
MessageDigestdigest = MessageDigest.getInstance("MD5");
byte[]result = digest.digest(password.getBytes());
StringBuffersb = new StringBuffer();
for(byteb : result){
intnumber = (int)(b & 0xff) ;
Stringstr = Integer.toHexString(number);
if(str.length()==1){
sb.append("0");
}
&nbs
28767
p; sb.append(str);
}
returnsb.toString();
} catch(NoSuchAlgorithmException e) {
e.printStackTrace();
//can'treach
return"";
}
}
}
----------------------------------------------------------------------------------------------------------------------8. Android各版本的兼容方法
package com.niubility.oschina_pro.ui.utils;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory.Options;
import android.graphics.Paint;
import android.os.Build;
import android.provider.MediaStore;
import android.view.View;
import android.view.Window;
import java.io.File;
/**
* Android各版本的兼容方法
*
*/
public class MethodsCompat {
@TargetApi(5)
publicstatic void overridePendingTransition(Activity activity, int enter_anim, intexit_anim) {
activity.overridePendingTransition(enter_anim,exit_anim);
}
@TargetApi(7)
publicstatic Bitmap getThumbnail(ContentResolver cr, long origId, int kind, Optionsoptions) {
returnMediaStore.Images.Thumbnails.getThumbnail(cr,origId,kind, options);
}
@TargetApi(8)
publicstatic File getExternalCacheDir(Context context) {
// // return context.getExternalCacheDir();API level 8
//
// // e.g."<sdcard>/Android/data/<package_name>/cache/"
// final File extCacheDir = newFile(Environment.getExternalStorageDirectory(),
// "/Android/data/" +context.getApplicationInfo().packageName + "/cache/");
// extCacheDir.mkdirs();
// return extCacheDir;
returncontext.getExternalCacheDir();
}
@TargetApi(11)
publicstatic void recreate(Activity activity) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
activity.recreate();
}
}
@TargetApi(11)
publicstatic void setLayerType(View view, int layerType, Paint paint) {
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB) {
view.setLayerType(layerType, paint);
}
}
@TargetApi(14)
publicstatic void setUiOptions(Window window, int uiOptions) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
window.setUiOptions(uiOptions);
}
}
}
----------------------------------------------------------------------------------------------------------------------9. 吐司的工具类
package com.niubility.oschina_pro.utils;
import android.content.Context;
import android.widget.Toast;
/**
*
* 吐司的工具类
*/
public final class MyToast {
publicstatic void show(Context context,String msg){
Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
}
}
[/b]
10.SP存储工具类
package com.niubility.oschina_pro.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public final class SPUtils {
private finalstatic String name = "config";
private finalstatic int mode = Context.MODE_PRIVATE;
/**
* 保存首选项
* @param context
* @param key
* @param value
*/
public staticvoid saveBoolean(Context context,String key,boolean value){
SharedPreferencessp = context.getSharedPreferences(name, mode);
Editoredit = sp.edit();
edit.putBoolean(key,value);
edit.commit();
}
public staticvoid saveInt(Context context,String key,int value){
SharedPreferencessp = context.getSharedPreferences(name, mode);
Editoredit = sp.edit();
edit.putInt(key,value);
edit.commit();
}
public staticvoid saveString(Context context,String key,String value){
SharedPreferencessp = context.getSharedPreferences(name, mode);
Editoredit = sp.edit();
edit.putString(key,value);
edit.commit();
}
/**
* 获取首选项
* @param context
* @param key
* @param defValue
* @return
*/
public staticboolean getBoolean(Context context,String key,boolean defValue){
SharedPreferencessp = context.getSharedPreferences(name, mode);
returnsp.getBoolean(key, defValue);
}
public staticint getInt(Context context,String key,int defValue){
SharedPreferencessp = context.getSharedPreferences(name, mode);
returnsp.getInt(key, defValue);
}
public staticString getString(Context context,String key,String defValue){
SharedPreferencessp = context.getSharedPreferences(name, mode);
returnsp.getString(key, defValue);
}
}
[b]----------------------------------------------------------------------------------------------------------------------[/b]
11.数据流的解析关闭工具类
package com.niubility.oschina_pro.utils;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
public class StreamUtils {
public staticString parseStream(InputStream inputStream) {
ByteArrayOutputStreambaos = null;
try {
baos =new ByteArrayOutputStream();
intlen = -1;
byte[]buffer = new byte[1024];
while((len = inputStream.read(buffer)) != -1) {
baos.write(buffer,0, len);
}
returnbaos.toString();
} catch(Exception e) {
} finally{
//
关闭流
closeIO(inputStream);
closeIO(baos);
}
returnnull;
}
public staticvoid closeIO(Closeable io) {
if (io !=null) {
try {
io.close();
}catch (IOException e) {
e.printStackTrace();
}
io =null;
}
}
}
[/b]
12.字符串相关操作工具类
package com.itcast.googleplay.utils;
import android.text.*;
import android.text.style.CharacterStyle;
import android.text.style.ForegroundColorSpan;
import java.text.DecimalFormat;
public class StringUtils {
public finalstatic String UTF_8 = "utf-8";
/** 判断字符串是否有值,如果为null或者是空字符串或者只有空格或者为"null"字符串,则返回true,否则则返回false */
public staticboolean isEmpty(String value) {
if (value!= null && !"".equalsIgnoreCase(value.trim())
&&!"null".equalsIgnoreCase(value.trim())) {
returnfalse;
} else {
returntrue;
}
}
/** 判断多个字符串是否相等,如果其中有一个为空字符串或者null,则返回false,只有全相等才返回true */
public staticboolean isEquals(String... agrs) {
Stringlast = null;
for (int i= 0; i < agrs.length; i++) {
Stringstr = agrs[i];
if(isEmpty(str)) {
returnfalse;
}
if(last != null && !str.equalsIgnoreCase(last)) {
returnfalse;
}
last =str;
}
returntrue;
}
/**
* 返回一个高亮spannable
*
* @param content
* 文本内容
* @param color
* 高亮颜色
* @param start
* 起始位置
* @param end
* 结束位置
* @return
高亮spannable
*/
public staticCharSequence getHighLightText(String content, int color,
intstart, int end) {
if(TextUtils.isEmpty(content)) {
return"";
}
start =start >= 0 ? start : 0;
end = end<= content.length() ? end : content.length();
SpannableStringspannable = new SpannableString(content);
CharacterStylespan = new ForegroundColorSpan(color);
spannable.setSpan(span,start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
returnspannable;
}
/**
* 获取链接样式的字符串,即字符串下面有下划线
*
* @param resId
* 文字资源
* @return
返回链接样式的字符串
*/
public staticSpanned getHtmlStyleString(int resId) {
StringBuildersb = new StringBuilder();
sb.append("<ahref=\"\"><u><b>").append(UIUtils.getString(resId))
.append("</b></u></a>");
return Html.fromHtml(sb.toString());
}
/** 格式化文件大小,不保留末尾的0 */
public staticString formatFileSize(long len) {
returnformatFileSize(len, false);
}
/** 格式化文件大小,保留末尾的0,达到长度一致 */
public staticString formatFileSize(long len, boolean keepZero) {
Stringsize;
DecimalFormatformatKeepTwoZero = new DecimalFormat("#.00");
DecimalFormatformatKeepOneZero = new DecimalFormat("#.0");
if (len< 1024) {
size =String.valueOf(len + "B");
} else if(len < 10 * 1024) {
// [0,10KB),保留两位小数
size =String.valueOf(len * 100 / 1024 / (float) 100) + "KB";
} else if(len < 100 * 1024) {
//[10KB, 100KB),保留一位小数
size =String.valueOf(len * 10 / 1024 / (float) 10) + "KB";
} else if(len < 1024 * 1024) {
//[100KB, 1MB),个位四舍五入
size =String.valueOf(len / 1024) + "KB";
} else if(len < 10 * 1024 * 1024) {
//[1MB, 10MB),保留两位小数
if(keepZero) {
size= String.valueOf(formatKeepTwoZero.format(len * 100 / 1024
/1024 / (float) 100))
+"MB";
} else{
size= String.valueOf(len * 100 / 1024 / 1024 / (float) 100)
+"MB";
}
} else if(len < 100 * 1024 * 1024) {
//[10MB, 100MB),保留一位小数
if(keepZero) {
size= String.valueOf(formatKeepOneZero.format(len * 10 / 1024
/1024 / (float) 10))
+"MB";
} else{
size= String.valueOf(len * 10 / 1024 / 1024 / (float) 10)
+"MB";
}
} else if(len < 1024 * 1024 * 1024) {
//[100MB, 1GB),个位四舍五入
size =String.valueOf(len / 1024 / 1024) + "MB";
} else {
//[1GB, ...),保留两位小数
size =String.valueOf(len * 100 / 1024 / 1024 / 1024 / (float) 100)
+"GB";
}
returnsize;
}
}
----------------------------------------------------------------------------------------------------------------------
13. 时区判断工具类
package com.niubility.oschina_pro.ui.utils;
import java.util.Date;
import java.util.TimeZone;
/**
* 时区判断工具类
*
*/
public class TimeZoneUtil {
/**
* 判断用户的设备时区是否为东八区(中国) 2014年7月31日
* @return
*/
public staticboolean isInEasternEightZones() {
booleandefaultVaule = true;
if(TimeZone.getDefault() == TimeZone.getTimeZone("GMT+08"))
defaultVaule= true;
else
defaultVaule= false;
returndefaultVaule;
}
/**
* 根据不同时区,转换时间 2014年7月31日
* @param time
* @return
*/
public staticDate transformTime(Date date, TimeZone oldZone, TimeZone newZone) {
DatefinalDate = null;
if (date!= null) {
inttimeOffset = oldZone.getOffset(date.getTime())
-newZone.getOffset(date.getTime());
finalDate= new Date(date.getTime() - timeOffset);
}
returnfinalDate;
}
}
----------------------------------------------------------------------------------------------------------------------
14.封装UI相关工具类
package com.itcast.googleplay.utils;
import android.content.Context;
import android.content.res.Resources;
import com.itcast.googleplay.base.MyApplication;
/**
*
* 封装和ui相关的操作
*/
public class UIUtils {
/**
* 得到上下文
*/
publicstatic Context getContext() {
returnMyApplication.getContext();
}
/**
* 得到Resource对象
*/
publicstatic Resources getResources() {
returngetContext().getResources();
}
/**
* 得到String.xml中的字符串信息
*/
publicstatic String getString(int resId) {
returngetResources().getString(resId);
}
/**
* 得到String.xml中的字符串数组信息
*/
publicstatic String[] getStrings(int resId) {
returngetResources().getStringArray(resId);
}
/**
* 得到Color.xml中的颜色信息
*/
publicstatic int getColor(int resId) {
returngetResources().getColor(resId);
}
/**
* 得到应用程序包名
*
* @return
*/
publicstatic String getPackageName() {
returngetContext().getPackageName();
}
/**
*dip-->px
*/
publicstatic int dip2Px(int dip) {
/*
1. px/(ppi/160) = dp
2. px/dp = density
*/
//取得当前手机px和dp的倍数关系
floatdensity = getResources().getDisplayMetrics().density;
int px =(int) (dip * density + .5f);
returnpx;
}
publicstatic int px2Dip(int px) {
//2. px/dp = density
//取得当前手机px和dp的倍数关系
floatdensity = getResources().getDisplayMetrics().density;
int dip= (int) (px / density + .5f);
returndip;
}
}
----------------------------------------------------------------------------------------------------------------------
15. 封装URL相关工具类
package com.niubility.oschina_pro.utils;
import java.io.Serializable;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
/**
*
* 封装URL工具类
*
*/
@SuppressWarnings("serial")
public class URLsUtils implements Serializable {
public finalstatic String HTTP = "http://";
public finalstatic String HTTPS = "https://";
privatefinal static String URL_SPLITTER = "/";
privatefinal static String URL_UNDERLINE = "_";
public finalstatic String URL_HOST = "oschina.net";
public finalstatic String URL_WWW_HOST = "www." + URL_HOST;
public finalstatic String URL_TEAM_HOST = "team." + URL_HOST;
public finalstatic String URL_GIT_HOST = "git." + URL_HOST;
public final static String URL_MY_HOST ="my." + URL_HOST;
public finalstatic String URL_MOBILE = HTTP + "m.oschina.net"
+URL_SPLITTER;
privatefinal static String URL_TYPE_NEWS = URL_WWW_HOST + URL_SPLITTER
+"news" + URL_SPLITTER;
privatefinal static String URL_TYPE_SOFTWARE = URL_WWW_HOST + URL_SPLITTER
+"p" + URL_SPLITTER;
privatefinal static String URL_TYPE_QUESTION = URL_WWW_HOST + URL_SPLITTER
+"question" + URL_SPLITTER;
privatefinal static String URL_TYPE_BLOG = URL_SPLITTER + "blog"
+URL_SPLITTER;
privatefinal static String URL_TYPE_TWEET = URL_SPLITTER + "tweet"
+URL_SPLITTER;
privatefinal static String URL_TYPE_ZONE = URL_MY_HOST + URL_SPLITTER
+"u" + URL_SPLITTER;
privatefinal static String URL_TYPE_QUESTION_TAG = URL_TYPE_QUESTION
+"tag" + URL_SPLITTER;
public finalstatic int URL_OBJ_TYPE_OTHER = 0x000;
public finalstatic int URL_OBJ_TYPE_NEWS = 0x001;
public finalstatic int URL_OBJ_TYPE_SOFTWARE = 0x002;
public finalstatic int URL_OBJ_TYPE_QUESTION = 0x003;
public finalstatic int URL_OBJ_TYPE_ZONE = 0x004;
public finalstatic int URL_OBJ_TYPE_BLOG = 0x005;
public finalstatic int URL_OBJ_TYPE_TWEET = 0x006;
public finalstatic int URL_OBJ_TYPE_QUESTION_TAG = 0x007;
public finalstatic int URL_OBJ_TYPE_TEAM = 0x008;
public finalstatic int URL_OBJ_TYPE_GIT = 0x009;
private intobjId;
privateString objKey = "";
private intobjType;
public intgetObjId() {
returnobjId;
}
public voidsetObjId(int objId) {
this.objId = objId;
}
publicString getObjKey() {
returnobjKey;
}
public voidsetObjKey(String objKey) {
this.objKey = objKey;
}
public intgetObjType() {
returnobjType;
}
public voidsetObjType(int objType) {
this.objType= objType;
}
/**
* 转化URL为URLs实体
*
* @parampath
* @return
不能转化的链接返回null
*/
public finalstatic URLsUtils parseURL(String path) {
if(StringUtils.isEmpty(path))
return null;
path =formatURL(path);
URLsUtils urls = null;
StringobjId = "";
try {
URLurl = new URL(path);
//
站内链接
if(url.getHost().contains(URL_HOST)) {
urls = new URLsUtils();
if (path.contains(URL_TEAM_HOST)) {
//
这里留待以后添加
// objId = parseObjId(path, URL_TYPE_NEWS);
urls.setObjKey(path);
urls.setObjType(URL_OBJ_TYPE_TEAM);
} else if (path.contains(URL_GIT_HOST)) {
//
这里留待以后添加
// objId = parseObjId(path, URL_TYPE_NEWS);
urls.setObjKey(path);
urls.setObjType(URL_OBJ_TYPE_GIT);
// www
} else if (path.contains(URL_WWW_HOST)) {
//
新闻
// www.oschina.net/news/27259/mobile-internet-market-is-small
if (path.contains(URL_TYPE_NEWS)) {
objId = parseObjId(path,URL_TYPE_NEWS);
urls.setObjId(StringUtils.toInt(objId));
urls.setObjType(URL_OBJ_TYPE_NEWS);
}
//
软件 www.oschina.net/p/jx
else if(path.contains(URL_TYPE_SOFTWARE)) {
urls.setObjKey(parseObjKey(path, URL_TYPE_SOFTWARE));
urls.setObjType(URL_OBJ_TYPE_SOFTWARE);
}
//
问答
else if (path.contains(URL_TYPE_QUESTION)) {
//
问答-标签http://www.oschina.net/question/tag/python
if (path.contains(URL_TYPE_QUESTION_TAG)) {
urls.setObjKey(parseObjKey(path,
URL_TYPE_QUESTION_TAG));
urls.setObjType(URL_OBJ_TYPE_QUESTION_TAG);
}
//
问答 www.oschina.net/question/12_45738
else {
objId =parseObjId(path, URL_TYPE_QUESTION);
String[] _tmp =objId.split(URL_UNDERLINE);
urls.setObjId(StringUtils.toInt(_tmp[1]));
urls.setObjType(URL_OBJ_TYPE_QUESTION);
}
}
// other
else {
urls.setObjKey(path);
urls.setObjType(URL_OBJ_TYPE_OTHER);
}
}
// my
else if (path.contains(URL_MY_HOST)) {
//
博客 my.oschina.net/szpengvictor/blog/50879
if (path.contains(URL_TYPE_BLOG)) {
objId = parseObjId(path,URL_TYPE_BLOG);
urls.setObjId(StringUtils.toInt(objId));
urls.setObjType(URL_OBJ_TYPE_BLOG);
}
//
动弹 my.oschina.net/dong706/tweet/612947
else if (path.contains(URL_TYPE_TWEET)) {
objId = parseObjId(path, URL_TYPE_TWEET);
urls.setObjId(StringUtils.toInt(objId));
urls.setObjType(URL_OBJ_TYPE_TWEET);
}
//
个人专页 my.oschina.net/u/12
else if (path.contains(URL_TYPE_ZONE)) {
objId = parseObjId(path, URL_TYPE_ZONE);
urls.setObjId(StringUtils.toInt(objId));
urls.setObjType(URL_OBJ_TYPE_ZONE);
} else {
//
另一种个人专页 my.oschina.net/dong706
int p = path.indexOf(URL_MY_HOST + URL_SPLITTER)
+ (URL_MY_HOST+ URL_SPLITTER).length();
String str = path.substring(p);
if (!str.contains(URL_SPLITTER)) {
urls.setObjKey(str);
urls.setObjType(URL_OBJ_TYPE_ZONE);
}
// other
else {
urls.setObjKey(path);
urls.setObjType(URL_OBJ_TYPE_OTHER);
}
}
}
// other
else {
urls.setObjKey(path);
urls.setObjType(URL_OBJ_TYPE_OTHER);
}
}
} catch(Exception e) {
e.printStackTrace();
urls= null;
}
returnurls;
}
/**
* 解析url获得objId
*
* @parampath
* @paramurl_type
* @return
*/
privatefinal static String parseObjId(String path, String url_type) {
StringobjId = "";
int p =0;
Stringstr = "";
String[]tmp = null;
p =path.indexOf(url_type) + url_type.length();
str =path.substring(p);
if(str.contains(URL_SPLITTER)) {
tmp = str.split(URL_SPLITTER);
objId = tmp[0];
} else {
objId = str;
}
returnobjId;
}
/**
* 解析url获得objKey
*
* @parampath
* @paramurl_type
* @return
*/
privatefinal static String parseObjKey(String path, String url_type) {
path =URLDecoder.decode(path);
StringobjKey = "";
int p =0;
Stringstr = "";
String[]tmp = null;
p =path.indexOf(url_type) + url_type.length();
str =path.substring(p);
if(str.contains("?")) {
tmp= str.split("?");
objKey = tmp[0];
} else {
objKey = str;
}
returnobjKey;
}
/**
* 对URL进行格式处理
*
* @parampath
* @return
*/
privatefinal static String formatURL(String path) {
if(path.startsWith("http://") || path.startsWith("https://"))
return path;
return"http://" + URLEncoder.encode(path);
}
}
----------------------------------------------------------------------------------------------------------------------
16. xml解析工具类
package com.niubility.oschina_pro.utils;
import com.thoughtworks.xstream.XStream;
importcom.thoughtworks.xstream.converters.basic.DoubleConverter;
importcom.thoughtworks.xstream.converters.basic.FloatConverter;
import com.thoughtworks.xstream.converters.basic.IntConverter;
importcom.thoughtworks.xstream.converters.basic.LongConverter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* xml解析工具类
*/
public class XmlUtils {
privatefinal static String TAG = XmlUtils.class.getSimpleName();
/**
* 将一个xml流转换为bean实体类
*
* @param
* @param
* @return
*/
@SuppressWarnings("unchecked")
publicstatic <T> T toBean(Class<T> type, InputStream is) {
XStreamxmStream = new XStream(new DomDriver("UTF-8"));
// 设置可忽略为在javabean类中定义的界面属性
xmStream.ignoreUnknownElements();
xmStream.registerConverter(new MyIntCoverter());
xmStream.registerConverter(new MyLongCoverter());
xmStream.registerConverter(new MyFloatCoverter());
xmStream.registerConverter(new MyDoubleCoverter());
xmStream.processAnnotations(type);
T obj =null;
try {
obj= (T) xmStream.fromXML(is);
} catch(Exception e) {
TLog.log(TAG, "解析xml发生异常:" + e.getMessage());
}finally {
if(null != is) {
try {
is.close();
} catch (IOException e) {
TLog.log(TAG, "关闭流出现异常:" + e.getMessage());
}
}
}
returnobj;
}
publicstatic <T> T toBean(Class<T> type, byte[] bytes) {
if(bytes == null) return null;
returntoBean(type, new ByteArrayInputStream(bytes));
}
publicstatic <T> T toBean(Class<T> type, String xml) {
byte[]bytes = xml.getBytes();
if(bytes == null) return null;
returntoBean(type, new ByteArrayInputStream(bytes));
}
privatestatic class MyIntCoverter extends IntConverter {
@Override
publicObject fromString(String str) {
intvalue;
try{
value = (Integer) super.fromString(str);
}catch (Exception e) {
value = 0;
}
return value;
}
@Override
publicString toString(Object obj) {
return super.toString(obj);
}
}
privatestatic class MyLongCoverter extends LongConverter {
@Override
publicObject fromString(String str) {
longvalue;
try{
value = (Long) super.fromString(str);
}catch (Exception e) {
value = 0;
}
return value;
}
@Override
publicString toString(Object obj) {
return super.toString(obj);
}
}
privatestatic class MyFloatCoverter extends FloatConverter {
@Override
publicObject fromString(String str) {
float value;
try{
value = (Float) super.fromString(str);
}catch (Exception e) {
value = 0;
}
return value;
}
@Override
publicString toString(Object obj) {
return super.toString(obj);
}
}
privatestatic class MyDoubleCoverter extends DoubleConverter {
@Override
publicObject fromString(String str) {
double value;
try{
value = (Double) super.fromString(str);
}catch (Exception e) {
value = 0;
}
return value;
}
@Override
publicString toString(Object obj) {
return super.toString(obj);
}
}
}
相关文章推荐
- Android开发中常用的工具类
- Android 最常用的快速开发工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 常用工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 10个常用工具类
- Android开发中常用的工具类整理
- Android开发中常用的工具类
- Android 最常用的快速开发工具类
- Android 最常用的快速开发工具类
- Android快速开发系列 10个常用工具类
- Android开发中常用的工具类
- Android 最常用的快速开发工具类
- 最全Android开发常用工具类
- Android快速开发系列 10个常用工具类
- Android快速开发系列 10个常用工具类
- Android开发中常用的工具类整理