2012-07-16 2 views
0

Activity에는 Exception을 던질 수있는 다른 구성원 member_two이있는 구성원 member_one이 있습니다. 이 Exception이 발생하면 사용자에게 Toast을 표시해야합니다. Toast을 표시하려면 Exceptionmember_tow에서 member_one까지, 그리고 member_oneActivity에서 내야합니다. 이 접근법은 큰 변화를 가져오고 그렇게하고 싶지 않습니다. 그냥 잘못 생각할 수도 있습니다. 예외를 처리하는 쉬운 방법이 있습니까? 나는활동 클래스에서 예외가 발생하면 사용자에게 알립니다.

foo.bar(this, ...); 

을 그리고 (내가 초보 개발자입니다대로 삐걱 거리는 깨끗 있는지 확실하지 않습니다 있지만) 내가했던

+0

패스'Context'은 다음 Context'는'Toast.makeText (mContext, "예외가 발생하였습니다"Toast'.like'확인'것을 사용 Toast.LENGTH_SHORT) .show(); ' –

+0

'보조 '클래스에'컨텍스트 '를 전달하는 것이 좋은 습관입니까? – Eugene

+0

'사용자'에게 통보하고 싶다면 '컨텍스트'가 필요합니다. 보시다시피 모든 '보기'에는 '컨텍스트'가 필요합니다. 또 다른 해결책은 '인터페이스'접근 방식을 사용하는 것입니다. –

답변

2

지금까지 문제의 두 가지 해결책이 있다는 것을 알고 있습니다.

  • 다음 member_one, member_two에 패스 ContextContext이 토스트를 만드는 것을 사용합니다. Like Toast.makeText(mContext, "Exception Occurred", Toast.LENGTH_SHORT).show();

두 번째 접근 방식은 member_one의 클래스에 등 Interface

문구를 넣을 Interface 방법으로 될 것입니다

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

    OnErrorOccured onError; 

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

같은 때 당신이 Exception 전화를받을 이제까지 onError.whatIsErr(e.toString());

메인에 그들이 청취자를 설정해야합니다 이러한 클래스 중 하나를 사용하려면 프로그래머가 알고 어떻게 다른

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 

    } 
}; 

Activity?

이 경우 생성자가 리스너를 통과하도록해야합니다. 당신`member_one`,`member_two`에

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

} 
+0

이 '인터페이스'메소드는 내 솔루션보다 훨씬 깨끗합니다 (불필요한 매개 변수를 전달하지 않음). 나는 이것을 확실히 사용하기 시작할 것입니다. –

+0

그리고 그것은 또한'flexible'입니다 :) –

+0

이렇게하는 것이 안전합니까? 다른 프로그래머가 리스너를 설정하는 데 필요한 이러한 클래스 중 하나를 사용하고자하는지 어떻게 알 수 있습니까? – Eugene

0

한 가지 매개 변수 그래서 등과 같은 Activity을 통과하다 과 같이 다른 방법으로 예외를 잡을 수 :

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

을 다시, 나는이 안전 연습은 보장 할 수 없습니다 나는 더 나은 솔루션을 듣고 싶어요.

관련 문제