android 中java编程的意外事件处理

来源:互联网 发布:西部数码已备案域名 编辑:程序博客网 时间:2024/06/10 20:02

android 中java编程的意外事件处理

分类: android JAVA 2333人阅读 评论(12) 收藏 举报

     不管你信不信,即使多么熟练编程的人员在coding的时候都会出现意想不到的bug。在上篇文章中我曾提到,bug的造成是多个方面的综合结果,有些bug是可以修复的,但是有些逻辑上的bug要修复可不是那么容易的事情,就像我们做错了一件事情,如果不去从根本上改正就会犯更大的错误一样,有时候bug也是一个积累的过程。

     在经历了android上的开发之后,我改变了我最初的想法,让我认识到了即使再简单的开发平台,开发一款产品都需要一个严密的逻辑认证,认证之后再进行开发,不仅能提高代码的生产效率,还能减少很多产品的bug。

 

    下面是我遇到的一些基本简单的bug,但是修复却花费了一段时间:

(1)android.view.WindowManager$BadTokenException: Unable to add window --

token android.os.BinderProxy@342917f8 is not valid; is your activity

running?

 

 

 是由于有activity时依附于另一个activity的,当被依附的activity产生错误的时候,该activity没有了靠山而产生错误。对于这个错误

还没有根本的解决办法,唯一的办法就是改变该activity依附于另一activity的事实,将其放入另一activity。

 

 

(2)01-13 17:21:04.408: WARN/System.err(20476): java.net.SocketException: The connection was reset

 原因是由于没有关闭socket链接造成的。

 

(3)java.net.SocketTimeoutException: The operation timed out

 该问题是由于没有捕获链接超时的异常导致的错误。需要在代码后面

 catch(SocketTimeoutException e){

   sendMessage(FILE_DOWNLOAD_ERROR, e);

 

      }

 

(4)android.view.WindowLeaked: Activity com.*.* has leaked window 

(5)07-13 14:31:56.962: INFO/global(1194): Default buffer size used in BufferedWriter constructor. It would be better to be explicit if an 8k-char buffer is required.
07-13 14:31:57.012: ERROR/AndroidRuntime(7141): java.lang.IllegalArgumentException: Activity#onCreateDialog did not create a dialog for id 110
07-13 14:31:57.012: ERROR/AndroidRuntime(7141):     at android.app.Activity.createDialog(Activity.java:869)

无法显示出dialog。代码如下所写:

private static final int SEARCH_DIALOG_Progress = 110;
    protected Dialog onCreateDialog(int id){
        switch(id){
        case SEARCH_DIALOG_Progress:
            search_progressDlg = new ProgressDialog(this);
            search_progressDlg.setTitle("search");
            search_progressDlg.setMessage("is in searching! please wait!");
            search_progressDlg.setOwnerActivity(getParent());
            search_progressDlg.setOnKeyListener(new OnKeyListener(){
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode,
                        KeyEvent event){
                    switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        mManager.mCancelDownload = true;
                        if(null != search_progressDlg)
                            search_progressDlg.dismiss();
                        Util.d(TAG, "keycode_back");
                        return true;
                    }
                    return false;
                }
            });
            return null; //应该是return search_progressDlg.
        }
        return null;
    }

原因是在创建了progressDialog后没有返回。

原创粉丝点击