2012-10-12 108 views
0

我正在使用默認相機應用拍照的應用程序。現在我想檢查一下是否拍過照片。在非Activity類中覆蓋方法Android

我SO閱讀上,可以用這種方法來完成:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    ... 
    } 

我的問題是,當我把我的類,方法,心不是一個Activity類我得到錯誤:

「方法onActivityResult(..)必須覆蓋或實現一個超類型方法「

我已經檢查,我的編譯器設置爲java 1.6。我的jre被設置爲1.6。

我該怎麼辦?

+6

嗯不,你不能在一個不是該類的子類的類中覆蓋一個類(Activity)的方法。這甚至意味着什麼? –

+2

'onActivityResult()'是Activity類中的一個方法。因此,如果您沒有擴展「活動」,則無法覆蓋它。 – kcoppock

+1

將該方法放入Activity類中。當你從相機應用程序返回時,它將被調用。 – DeeV

回答

3

你才能收到需要一個Activity相機動作的結果。你爲什麼要把代碼放在其他類中?如果只是爲了重新使用/組織,那麼爲什麼不直接致電Activity的其他課程?

public class SomeOtherClass { 
    public static void someOtherMethod(int requestCode, int resultCode, Intent data){ 
     ... 
    } 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    SomeOtherClass.someOtherMethod(requestCode,resultCode,data); 
    ... 
} 
+0

這是我決定實施的解決方案。它足夠好。謝謝。 @BenoîtBouré的結果也是正確的。 – Majstor

2

您只能從另一個Activity或Fragment中的Activity獲取結果。 因此,您只能從擴展Activity或它的後代之一的類(這實際上是java相關的而不是android相關的)擴展onActivityResult()。 此外,您必須在調用startActivityForResult()的同一活動中擴展並定義onActivityResult()。

如果您需要執行的另一個類別代碼的不延伸活動,你可以簡單地實現自己的方法和調用它裏面onActivityResult()

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(requestCode == MY_REQUEST_CODE && resultCode == RESULT_OK) 
    { 
    MyClass object = new MyClass(); //or maybe it's already instantiated and it is defined as a field 
    object.myCustomMethod(data); //pass it data or one of it's extras 
    } 

} 
+0

這個解決方案也不錯。謝謝。 @ dave.c結果也是正確的。 – Majstor