因为工作的原因,发现日志是必不可少的,这在以后的使用中,对调试,对技术支持起到非常重要的作用。
因为Blackberry的特殊性,一般人不会选在设备上调试,大多数人都选择在模拟器上开发。所以开发的程序一旦部署在设备上时,已经很难知道运行的状态。这个时候,好的日志就变得那么重要,如果好的话,可以减少几个round。
那么,如何写日志呢?
首先,需要熟悉Blackberry的日志API。还记得alt+lglg吗?这是一个不错的选择。
其次,该记录那些内容呢?答案也很简单,记录一些有用的信息,一般来说包括:
- 记录程序执行的顺序
- 记录程序执行的环境
- 记录一些重要的条件
- 记录一些警告,错误等信息
好的,接下来就是实现了,我们现在介绍如何将日志写到Blackberry的日志平台上。
直接贴代码:
/* 2 * BlackberryLogger.java 3 * 4 * Copyright (C) Taiguo Zhang 5 * 6 * Author: Taigoo Zhang 7 * Email: confach(#—)gmail.com 8 */ 9 10 11 12 import net.rim.device.api.system.EventLogger; 13 import java.io.UnsupportedEncodingException; 14 15 16 /** 17 * The BlackberryLoggerto log all events 18 */ 19 public class BlackberryLogger{ 20 /** 21 * The event logger guid 22 */ 23 private long event_guid_id=0x4c9d3452d88022f2L; 24 25 /** 26 * The BlackberryLogger 27 * To log all information.. 28 */ 29 public BlackberryLogger() { 30 EventLogger.register(event_guid_id,"yourlogger",EventLogger.VIEWER_STRING); 31 } 32 33 /** 34 * Get an instance of BlackberryLogger 35 * @return return an BlackberryLoggerobject. 36 */ 37 public static BlackberryLogger getInstance() 38 { 39 return new BlackberryLogger(); 40 } 41 42 /** 43 * Log the information. 44 * @param message The message you will log 45 */ 46 public void log(String message) 47 { 48 String SEPERATOR_CHAR=" "; 49 if(message==null||message.trim().equals("")) return; 50 String new_str=DateUtils.now()+SEPERATOR_CHAR+"app:"+SEPERATOR_CHAR+message; 51 System.out.println(new_str); 52 try 53 { 54 new_str=new String(new_str.getBytes(),"UTF-8"); 55 byte[] msg_bytes =new_str.getBytes(); 56 EventLogger.logEvent(event_guid_id,msg_bytes); 57 } 58 catch(Exception ex) 59 { 60 System.err.println(ex); 61 } 62 } 63 }
是不是发现上面代码很简单呢?
调用也很简单:
BlackberryLogger.getInstance().log("hello);
再介绍一个小技巧,在抛出exeption时,为了定位到源代码的每一行,我们可以对exception打印一下,代码如下:
public static String getExceptionStackTrackMessage(Exception ex) { StringBuffer sb = new StringBuffer(); sb.append(ex.getMessage()).append("\r\n"); StackTraceElement[] elems = ex.getStackTrace(); for(StackTraceElement st : elems) { sb.append(st.toString()).append("\r\n"); } return sb.toString(); }
上面的技术非常简单,别看是小技术,但是用好了,对咱们的开发起到事半功倍的效果。
请帮个忙。我的黑莓9530机器用着中国移动的全球通卡,包月里含WAP与NET。但是我这个机器不能用GOOGLEMAP。 但却可以用自带浏览器上网,UCWEB,QQ2008. 乐图也能用。service book用过网上的那个ServiceBook_Net_Wap_Email.ipd和serverbook-Garfiled_china mobile.ipd都不能用googlemap.我想可能是这个service book不能上net的原因。但是用ServiceBook_Net_Wap_Email.ipd后调到NETBROWSER上不了网。请帮个忙。QQ:270901106.
我将option-advanced-tcp 中的apn改为cmnet后,全部解决。
Hi, 你好, 我叫无花, 看了你的几篇文章发现对我学习很有帮助, 能加你联系方式吗, 我的qq是616833302, 这年头开发黑莓不容易啊. 我最近也在学习黑莓的开发,并且要完成一些项目