抓住异常

时间:2011-06-21 10:33:06

标签: java android

我得到了Activity,在onCreate()中我尝试获取数据:

protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        ...............
        fillUI();
    }

 public void getDetailedItem(){
        FeedParser parser=new FeedParser();
        try{
           mItem=parser.parseDetailed();
        }catch(Exception e){
            closeAndShowError();
        }
    }

    public void fillUI(){
        getDetailedItem();
        if(mItem!=null){
        ...............
        }else{
          closeAndShowError();
        }
    }

private void closeAndShowError(){
        Context context = getApplicationContext();
        CharSequence text = getResources().getString(R.string.toast_error);
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

        finish();
    }

他们的问题是,当Exception发生时,它被捕获,我希望我的活动完成自己,但我仍然得到执行fillUI()的代码,所以我不得不在getDetailedItem()之后放置if语句; 我该如何解决?

5 个答案:

答案 0 :(得分:1)

您可以这样做:

public void getDetailedItem(){
        FeedParser parser=new FeedParser();
        try{
           mItem=parser.parseDetailed();
        }catch(Exception e){
           mItem = null;
        }
}

然后在fillUI() mItem null {{1}}显示错误;

答案 1 :(得分:1)

您可以将parseDetailed中可能引发的异常传递给fillUI方法:

public void getDetailedItem() throws Exception {
    FeedParser parser=new FeedParser();
    mItem=parser.parseDetailed();
}

public void fillUI(){
    try {
        getDetailedItem();
        // rest of your code..
    } catch(Exception e) {
        closeAndShowError();
    }
}

答案 2 :(得分:0)

finish()语句不是立即返回,您的代码会继续运行,直到它确定它已完成。你需要给自己留下一个异常指示器,当它发生时通过你的调用链返回,而不是继续运行。

答案 3 :(得分:0)

因为你正在捕捉异常; fillUI()函数永远不会收到任何错误的通知。

您的codepath如下: fillUI - > getDetailedItem - >异常捕获 - > closeAndShowError - >完成() - >返回closeAndShowError - >捕获块后返回getDetailedItem - >返回fillUI。

基本上,调用fillUI中getDetailedItem之后的代码是因为你捕获了异常并且没有让其他函数知道。无论是通过返回值,还是通过抛出(并且可能捕获)新的异常。

答案 4 :(得分:0)

finish()会导致Activity停止作为其生命周期的下一步。但在您称之为它的时候,它仍处于另一个生命周期步骤的过程中:onCreate()。它不会以某种方式立即退出方法中。

这就是答案,但更好的方法是重新设计一下你的代码。如果你正在处理这样的问题,这可能不是处理它的最干净的方式。