2012-07-16 22 views
0

我的Activity持有會員member_one持有另一名會員member_two,它可以拋出Exception。如果此Exception發生,我需要向用戶顯示Toast。爲了顯示Toast我需要從member_towmember_one然後從member_one到我的ActivityException。這種方法導致了很大的變化,我不想這樣做。可能我只是想錯了,有沒有簡單的方法來處理異常?我已經做了(雖然我不知道這是否是乾乾淨淨的,因爲我是一個新手開發者)通知用戶,如果發生例外情況不在活動類別

+0

通'Context'你'member_one','member_two',然後使用'Context'使''Toast'.like Toast.makeText(mContext 「的異常出現」 Toast.LENGTH_SHORT).show();' – 2012-07-16 20:07:36

+0

將'Context'傳遞給這些輔助類是否是一個好習慣? – Eugene 2012-07-16 20:13:09

+0

如果你想通知'用戶'你必須需要一個'上下文'。正如你所看到的每個View都需要'Context' ..另一個解決方案是:使用'Interface'方法。 – 2012-07-16 20:19:40

回答

2

到目前爲止,我知道會有兩個解決方案的問題。

  • Contextmember_onemember_two,然後使用該Context做吐司。 Like Toast.makeText(mContext, "Exception Occurred", Toast.LENGTH_SHORT).show();

第二條本辦法將通過Interface

- 製作一個Interface方法在你的類member_one

public interface OnErrorOccured { 
     public void whatIsErr(String msg); 
    } 

    OnErrorOccured onError; 

    public void setOnDetailsLoadListener(OnErrorOccured onError) { 
     this.onError = onError; 
    } 
` 

,並當過你Exception通話onError.whatIsErr(e.toString());

,並在主Activity

member_one.setOnErrorListener(mErrorOccured); 

OnErrorOccured mErrorOccured =new OnErrorOccured() { 

    @Override 
    public void whatIsErr(String msg) { 
     // Do what ever you want..show Toast, or do any UI update 

    } 
}; 

程序員如何其他知道,如果他們想使用他們需要設置監聽器,這些類中的一個?

對此,您強制構造函數傳遞一個偵聽器。

public yourConstructor(OnErrorOccured errorListener,.....) 
{ 
    this.setOnErrorListener(errorListener); 
    ... 

} 
+0

這個'Interface'方法似乎比我的解決方案更清潔(不傳遞不需要的參數)。我肯定會開始使用它。 – 2012-07-16 20:46:56

+0

,它也'靈活':) – 2012-07-16 20:51:33

+0

這樣做是否安全?其他程序員如何知道他們是否想要使用這些類中的一個來設置偵聽器? – Eugene 2012-07-17 09:12:15

0

一件事是通過Activity像這樣的參數:

foo.bar(this, ...); 

然後,我可以捕獲該異常中的其他方法,像這樣:

bar(final Activity activity, ...) 
{ 
    try 
    { 
     // Whatever 
    } 
    catch (Exception e) 
    { 
     Toast.makeText(activity, "You dun goofed!", Toast.LENGTH_SHORT) 
      .show(); 
    } 
} 

同樣,我也不能保證,這是安全的做法,我很想聽到一個更好的解決方案。

相關問題