2012-10-12 67 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