您的位置:首页 > 移动开发 > Android开发

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]----------------------------------------------------------------------------------------------------------------------

[/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]----------------------------------------------------------------------------------------------------------------------

[/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]----------------------------------------------------------------------------------------------------------------------

[/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开发