当前位置:  编程技术>移动开发
本页文章导读:
    ▪thinking in java 学习笔记 12 通过错误处理异常        thinking in java 学习笔记 12 通过异常处理错误  第十二章 通过异常处理错误     在以前平时的编程中没有真正意思到异常处理的强大,只从有一个android的图片过大,内存溢出,使用了异常处.........
    ▪ 变换Xcode里打印的unicode编码日志        转换Xcode里打印的unicode编码日志 1)打开Terminal 2)输入python 3)print(u'\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167'.encode('utf8')) ‘\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167’为.........
    ▪ 【通译】(82)多媒体与照相机       【翻译】(82)多媒体与照相机 【翻译】(82)多媒体与照相机   see http://developer.android.com/guide/topics/media/index.html   原文见 http://developer.android.com/guide/topics/media/index.html   ------------------------------- .........

[1]thinking in java 学习笔记 12 通过错误处理异常
    来源: 互联网  发布时间: 2014-02-18
thinking in java 学习笔记 12 通过异常处理错误

 第十二章 通过异常处理错误

 

 

在以前平时的编程中没有真正意思到异常处理的强大,只从有一个android的图片过大,内存溢出,使用了异常处理才得以解决问题,我对异常处理的一个大概可以用一句话来表达:就是让程序在错误中恢复,依然进行下去

 

 

 

.概念

在c语言中,只有一些约定俗称的错误处理模式,而没有同意的异常处理机制,这使得编程人员思想趋向于只要你不随便乱点,就不会出错,否则就不关我事了,对我来说,这种想法是不要得的,并不是人人都是程序员,你的应用应该是强壮的,而我个人也就非常喜欢强壮的程序,java的异常处理机制是基于c++上面的,异常处理的一个很重要的好处就是将问题处理的代码和正常程序的代码分离开,使得代码的阅读,编写与调试工作更加井井有条

 

 

 

.基本异常

举一个例子,比如说除法,除数不能为0,或者不能为某些值,但是你不知道怎么去解决它,可以说是你意料之外,那么这时候你就应该抛出一个异常,然后异常处理程序处理(原来的执行路径将会打断),首先要在堆上new 一个异常对象,然后在当前环境中弹出对这个对象的引用,然后就把这个引用交给异常处理程序

异常参数,标准的异常类都有两个构造器,一个是默认的,一个是接受字符串作为参数的,以便将相关信息放入异常对象的构造器中

throw,抛出异常的引用,能够抛出任意类型的throwable对象,它是异常类型的根类,错误的信息保存在异常对象内部,然后上一层环境通过这些信息来决定如何处理异常

 

 

.捕获异常

监控区域,也就是try块,

处理程序,也就是catch块,可以使用多个catch,这样就可以针对性的来解决异常

 

 

.异常处理理论模型

终止模型。很容易理解,。就是发生了错误,然后异常处理可能进行了一些错误记录,然后系统就被迫终止

恢复模型。其实我们平时用的操作系统用的就是恢复模型,因为不可能,因为我们的误操作就要重启吧,可以在while里面加try,然后知道准确而至,这种虽然好,但是耦合度高,复杂性大,因为错误是千万种的,对于大型程序来说,维护与编写,无疑是噩梦

 

 

 

.自定义异常

必须从已有的异常类继承

throws,这个是为方法声明异常,当方法中有抛出异常时,必须声明,否则不能通过(runtimeexception及子类可以不用)注意:不建议在异常处理中放入过多的操作,耦合度会增加

printstatictrace()方法,打印从方法调用处直到异常抛出处

 

 

.异常与记录日志

这个非常重要,为什么呢。特别来说,我平时使用软件的时候,它都会将异常记录打印在一个文件上,然后你可以选择提交,这样帮助他们修复软件,在cam360里面就是这样

可以使用java.util.logging

 

 

 

.异常说明

throws ,因为源码不会与程序库一起发布

 

技巧:可以先声明异常,占个位置,然后不抛出异常,等以后有空再不上去

 

.捕获所有异常

exception放在最后

fillinstacktrace()可以使抛出点重置

 

.重新抛出异常

有两种,第一种是把原先的异常处理了,然后再抛出,第二种是把原先的异常处理,再新建一个异常抛出(原先的异常已解决),。。。使用throw e

 

 

.异常链

防止异常被屏蔽,可使用initcause

 

.java标准异常

throwable类可以被用来表示任何可以作为异常被抛出的类,且分为两种类型(继承),error,exception

 

runtimeexception称为不受检查异常,很难控制,只有代码的时候注意点

 

.finally清理

恢复状态的时候需要使用,无论是return,break,continue,都会使用finally

 

缺陷:在finally中使用throw,原先异常丢失,在finally中return根本不会报异常

 

 

.异常的限制

 

这样的异常实在繁琐

 

可能要等到以后自己成长了,才真正能体会到

 

 

 

 

 

注: 

android 监听应用程序异常,输出异常日志log
2011-07-15 14:35 257人阅读 评论(0) 收藏 举报
[java] view plaincopy
  • <pre  name="code">1--在manifest添加:  
  • [java] view plaincopy
  • <application android:icon="@drawable/icon" android:label="@string/login_title"  
  •   android:theme="@style/skin"  
  •   android:name="com.XXX.application.LauncherApplication"  
  •   android:process="@string/process" >  
  • [java] view plaincopy
  •    
  • [java] view plaincopy
  • public class LauncherApplication extends Application {  
  •     private Context context;  
  •       
  •     @Override  
  •     public void onCreate () {  
  •         super.onCreate();  
  •   
  •         AppExcepiton appException = AppExcepiton.getInstance();   
  •           
  •         appException.init(getApplicationContext());   
  •   
  •           
  •   
  • }  
  • 2—
    [java] view plaincopy
  • public class AppExcepiton implements UncaughtExceptionHandler {  
  •   
  •     // 获取application 对象;  
  •     private Context mContext;  
  •   
  •     private Thread.UncaughtExceptionHandler defaultExceptionHandler;  
  •     // 单例声明CustomException;  
  •     private static AppExcepiton appException;  
  •   
  •     private AppExcepiton() {  
  •     }  
  •   
  •     public static AppExcepiton getInstance() {  
  •         if (appException == null) {  
  •             appException = new AppExcepiton();  
  •         }  
  •         return appException;  
  •     }  
  •   
  •     @Override  
  •     public void uncaughtException(Thread thread, Throwable exception) {  
  •         // TODO Auto-generated method stub  
  •         String path = null;  
  •         if (defaultExceptionHandler != null) {  
  •             String state = Environment.getExternalStorageState();  
  •             // 判断SdCard是否存在并且是可用的  
  •             if (Environment.MEDIA_MOUNTED.equals(state)) {  
  •                 path = Environment.getExternalStorageDirectory().getPath();  
  •             }  
  •             // 创建一个logcat目录  
  •             path = path + "/eIVS/log";  
  •             File file = new File(path);  
  •             if (!file.exists()) {  
  •                 file.mkdir();  
  •             }  
  •             String time = getCurrentTime();  
  •             String fileName = time.substring(0, 9);  
  •             File myFile = new File(path+"/"+fileName+".log");  
  •             String str = "\n"+time+"-->"+"["+exception.getLocalizedMessage()+"]";  
  •             try {  
  •                 FileWriter fw = new FileWriter(myFile, true);  
  •                 fw.write(str);  
  •                 fw.flush();  
  •                 fw.close();  
  •             } catch (IOException e) {  
  •                 // TODO Auto-generated catch block  
  •                 e.printStackTrace();  
  •             }  
  •               
  •             Log.e("tag", "exception >>>>>>>" + exception.getLocalizedMessage());  
  •             // 将异常抛出,则应用会弹出异常对话框.这里先注释掉  
  •             // defaultExceptionHandler.uncaughtException(thread, exception);  
  •   
  •         }  
  •     }  
  •     /** 
  •      * 获得当前时间 
  •      * @return 
  •      */  
  •     public String getCurrentTime(){  
  •         Time t = new Time();  
  •         t.setToNow();  
  •         int year = t.year;  
  •         int month = t.month+1;  
  •         int day =  t.monthDay;  
  •         int hour = t.hour;  
  •         int minute = t.minute;  
  •         int second =  t.second;  
  •         String time = year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second;  
  •         return time;  
  •           
  •     }  
  •     public void init(Context context) {  
  •         mContext = context;  
  •         defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();  
  •         Thread.setDefaultUncaughtExceptionHandler(this);  
  •     }  

  • 3--在一个activity中模拟异常:
    [java] view plaincopy
  • public void onCreate(Bundle savedInstanceState) {  
  •   super.onCreate(savedInstanceState);  
  •   setContentView(R.layout.login);  
  •   // 初始化资源信息  
  •   throw new RuntimeException("--------");  
  • //  init();  
  •    
  •  }  
  • [java] view plaincopy
  • /** 
  •   * 删除超过一年的日志 
  •   * @param path 
  •   */  
  •  public void deleteOldFile(final String path){  
  •   File file = new File(path);  
  •   file.list(new FilenameFilter() {  
  •      
  •    @Override  
  •    public boolean accept(File dir, String filename) {  
  •     // TODO Auto-generated method stub  
  •     File file = new File(path+"/"+filename);  
  •     Long ago = file.lastModified();  
  •     Long now = System.currentTimeMillis();  
  •     //如果最后一次修改时间超过一年:3153600秒  
  •     if((now-ago) > 31536000){  
  •      file.delete();  
  •     }  
  •     return false;  
  •    }  
  •   });  
  •     
  •  }  
  • [java] view plaincopy
  • //打印 有用信息 能够指出 错误代码的行数  
  • [java] view plaincopy
  • <pre  name="code">@Override  
  •     public void uncaughtException(Thread thread, Throwable exception) {  
  •         // TODO Auto-generated method stub  
  •         StackTraceElement[] stack = exception.getCause().getStackTrace();    
  •         String path = null;  
  •         if (defaultExceptionHandler != null) {  
  •             String state = Environment.getExternalStorageState();  
  •             // 判断SdCard是否存在并且是可用的  
  •             if (Environment.MEDIA_MOUNTED.equals(state)) {  
  •                 path = Environment.getExternalStorageDirectory().getPath();  
  •             }  
  •             // 创建一个logcat目录  
  •             path = path + "/eIVS/log";  
  •             File file = new File(path);  
  •             if (!file.exists()) {  
  •                 file.mkdir();  
  •             }  
  •             //删除过期文件  
  •             deleteOldFile(path);  
  •             String time = getCurrentTime();  
  •             String fileName = time.substring(0, 9);  
  •             File myFile = new File(path+"/"+fileName+".log");  
  •              try {    
  •                  String str = "\n"+time+"-->";  
  •                  FileOutputStream fos = new FileOutputStream(myFile,true);  
  •                  fos.write(str.getBytes());  
  •                  for (int i = 0; i < stack.length; i++) {    
  •                      fos.write(stack[i].toString().getBytes());    
  •                  }    
  •    
  •                  fos.flush();    
  •                  fos.close();    
  •    
  •                  } catch (Exception e) {    
  •    
  •              }  }  
  •  

     

    .异常的限制

     

     

     

     


        
    [2] 变换Xcode里打印的unicode编码日志
        来源: 互联网  发布时间: 2014-02-18
    转换Xcode里打印的unicode编码日志

    1)打开Terminal

    2)输入python

    3)print(u'\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167'.encode('utf8'))

    ‘\u6027\u611f\u597d\u83b1\u575e\u5973\u661f\u7ecf\u5178\u88f8\u7167’为要转化的编码;


        
    [3] 【通译】(82)多媒体与照相机
        来源: 互联网  发布时间: 2014-02-18
    【翻译】(82)多媒体与照相机

    【翻译】(82)多媒体与照相机

     

    see

    http://developer.android.com/guide/topics/media/index.html

     

    原文见

    http://developer.android.com/guide/topics/media/index.html

     

    -------------------------------

     

    Multimedia and Camera

     

    多媒体与照相机

     

    -------------------------------

     

    Topics

     

    主题

     

    * Media Playback 媒体回放

    * JetPlayer JetPlayer 

    * Camera 照相机

    * Audio Capture 音频捕捉

     

    Key classes

     

    关键类

     

    MediaPlayer

    JetPlayer

    Camera

    MediaRecorder

    AudioManager

    SoundPool

     

    See also

     

    另见

     

    Android Supported Media Formats Android支持的媒体格式

    JetCreator User Manual JetCreator用户手册 

     

    -------------------------------

     

    The Android multimedia framework includes support for capturing and playing audio, video and images in a variety of common media types, so that you can easily integrate them into your applications. You can play audio or video from media files stored in your application's resources, from standalone files in the file system, or from a data stream arriving over a network connection, all using the MediaPlayer or JetPlayer APIs. You can also record audio, video and take pictures using the MediaRecorder and Camera APIs if supported by the device hardware.

     

    Android多媒体框架包含对捕捉和播放各种通用媒体类型(注:并不是所有Android设备都支持某种多媒体格式,取决于硬件和系统版本)的音频、视频和图片的支持,使你可以轻松地集成它们进你的应用程序。你可以播放来自存储在你的应用程序的资源中的媒体文件中的音频或视频,来自文件系统中的单独文件,或者来自通过网络连接到达的数据流,所有都使用MediaPlayer或JetPlayer的API。你还可以使用MediaRecorder和Camera的API记录音频、视频和照相,如果设备的硬件支持的话。

     

    The following topics show you how to use the Android framework to implement multimedia capture and playback.

     

    以下主题向你展示如何使用Android框架实现多媒体捕捉和回放。

     

    Media Playback

     

    媒体回放(注:播放)

     

    How to play audio and video in your application.

     

    如何在你的应用程序中播放音频和视频。

     

    JetPlayer

     

    JetPlayer(注:JET是用于小型嵌入式设备上的一种交互式音乐播放器和交互式音乐引擎,以MIDI格式的音轨实时响应游戏播放事件和用户交互,由SONiVOX提供。SONiVOX是隶属Sonic网络公司,是OHA开放手机联盟的软件开发商之一,见http://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E6%89%8B%E6%8C%81%E8%AE%BE%E5%A4%87%E8%81%94%E7%9B%9F和http://www.openhandsetalliance.com/press_releases.html)

     

    How to play interactive audio and video in your application using content created with JetCreator.

     

    如何在你的应用程序中使用用JetCreator创建的内容来播放交互式(注:互动)音频和视频。

     

    Camera

     

    照相机

     

    How to use a device camera to take pictures or video in your application.

     

    如何在你的应用程序中使用一个设备照相机照相或录视频。

     

    Audio Capture

     

    音频捕捉

     

    How to record sound in your application.

     

    如何在你的应用程序中录音。

     

    Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.

     

    除特别说明外,本文在Apache 2.0下许可。细节和限制请参考内容许可证。

     

    Android 4.0 r1 - 16 Apr 2012 17:06

     

    -------------------------------

     

    Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

     

    此页部分内容,是基于Android开源项目所创建和共享的工作,并且根据知识共享2.5署名许可证描述的条款来使用的修改版。

     

    (本人翻译质量欠佳,请以官方最新内容为准,或者参考其它翻译版本:

    * ソフトウェア技術ドキュメントを勝手に翻訳

    http://www.techdoctranslator.com/android

    * Ley's Blog

    http://leybreeze.com/blog/

    * 农民伯伯

    http://www.cnblogs.com/over140/

    * Android中文翻译组

    http://androidbox.sinaapp.com/



        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3