編輯:關於Android編程
Log是開發人員調試很重要的檢查點,所以呢,巧妙控制Log 是優秀碼農必須掌握好的技能之一!
第一步:寫過Util工具類,如下:
public class Utils { /** * 用來獲取Application meta data(這個在AndroidManifest中設置) */ public static Object getApplicationMeta(String key) { Object applicationMeta = null; try { ApplicationInfo applicationInfo = getPackageInfo().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); if(applicationInfo != null) { applicationMeta = applicationInfo.metaData.get(key); } } catch (NameNotFoundException e) { L.e("can not found the meta in the application attributes:"+key); } return applicationMeta; } }第二步:設置debug開關
public class AppConfigs { //設定一個debug開關,控制是否打印log private static boolean init = false; private static boolean mDebug = false; public static void loadConfig() { if(!init) { //load the debug switch Object debug = Utils.getApplicationMeta("debug"); if(debug!=null) { try { mDebug = (Boolean)debug; } catch (Exception e) { L.e("debug tag is error"); } } init = true; } } public static boolean isDebug() { if(!init) { loadConfig(); } return mDebug; } }
第三步:重寫Log的打印方法,以及保存名稱:如 log_20140228
public class L { private static final String TAG = Constants.APP_NAME; /** * log文件名字 */ public static final String filename= Constants.LOG_DIR + File.separator + "log"; /** *根據Log不同等級 */ public static void v(String text) { if (AppConfigs.isDebug()) { Log.v(TAG, text); write(text, Log.VERBOSE); } } public static void d(String text) { if (AppConfigs.isDebug()) { Log.d(TAG, text); write(text, Log.DEBUG); } } public static void i(String text) { if (AppConfigs.isDebug()) { Log.i(TAG, text); write(text, Log.INFO); } } public static void w(String text) { if (AppConfigs.isDebug()) { Log.w(TAG, text); write(text, Log.WARN); } } public static void e(String text) { if (AppConfigs.isDebug()) { Log.e(TAG, text); write(text, Log.ERROR); } } public static void e(String text, Throwable throwable) { StackTraceElement[] elements = throwable.getStackTrace(); for (StackTraceElement e : elements) { e(e.toString()); } } /** * 將Log寫到日志文件中 * @param text * @param level */ private static synchronized void write(String text, int level) { StringBuilder sb = new StringBuilder(); sb.append("[" + DateUtil.toTime(System.currentTimeMillis(), DateUtil.DATE_FORMATE_ALL) + "]"); switch (level) { case Log.VERBOSE: sb.append("[V]\t"); break; case Log.DEBUG: sb.append("[D]\t"); break; case Log.INFO: sb.append("[I]\t"); break; case Log.WARN: sb.append("[W]\t"); break; case Log.ERROR: sb.append("[E]\t"); break; } //可以任意的訪問文件的任何地方 RandomAccessFile raf = null; try { String fileName =filename+ "_" + DateUtil.toTime(System.currentTimeMillis(), DateUtil.DATE_DEFAULT_FORMATE); File logFile = new File(fileName); if (!logFile.exists()) { Utils.initExternalDir(false); logFile.createNewFile(); } raf = new RandomAccessFile(fileName, "rw"); raf.seek(raf.length());//將文件記錄指針定位到pos位置。 raf.writeBytes(sb.toString() + text + "\r\n"); } catch (IOException e) { e.printStackTrace(); } finally { if (raf != null) { try { raf.close(); } catch (IOException e) { } } } } }
//控制是否打印Log
寫入文件效果 大概如下 有詳細的時間,log等級,內容可以自己控制。
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### position 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ADS 0
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 1
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 2
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:36][I] network state:WIFI
[2014-02-28 16:49:36][I] network state:WIFI
[2014-02-28 16:49:38][I] network state:WIFI
微信可以說是我們當下非常常用的手機軟件,很多人都會選擇它來進行交流。有的時候,我們在使用微信的過程中也會發現很多問題,今天,小編就來講講微信發不出信息怎麼辦
picasso是Square公司開源的一個Android圖形緩存庫,地址http://square.github.io/picasso/,可以實現圖片下載和緩存功能。
微信右上角的操作菜單看起來很好用,就照著仿了一下,不過是舊版微信的,手裡剛好有一些舊版微信的資源圖標,給大家分享一下。不知道微信是用什麼實現的,我使用popupwindo
4月20號,樂視手機一口氣發布了3款二代超級手機,分別是:樂2、樂2 Pro、樂Max 2,其中除了樂2只有一個版本外,其它2款機型都有多個版本。針對有網友