从Android中的另一个类调用方法时,“没有封闭的类型实例”错误

同事们,我有这样的问题:
在我的第一堂课中,我有

public class parseYouTubeAndYahoo extends AsyncTask<String, Void, List<VideoDataDescription>>

解析来自互联网的数据。但我需要从另一个类调用此类的execute()方法。在尝试修改此类代码时:

new MainActivity.parseYouTubeAndYahoo().execute("someURL"); 

我有来自Eclipse的下一条错误消息

不能访问类型为MainActivity的封闭实例。必须使用MainActivity类型的封闭实例限定分配(例如x.new A(),其中x是MainActivity的实例)。

真的,这个问题笼罩在迷雾中。那么,如何从另一个类调用此方法?

最佳答案
就这里的实际错误而言,如果parseYouTubeAndYahoo类是Activity内部的非静态内部类,那么你需要一个封闭类的实例来实例化内部类。所以,你需要:

MainActivity myActivity = new MainActivity();
MainActivity.parseYouTubeAndYahoo asyncTask = myActivity.new parseYouTubeAndYahoo();

然而….

你真的不应该从Activity外部实例化你的Activity的非静态内部类,因为为了实例化一个非静态的内部类,你必须实际实例化封闭类,在这种情况下,它是Activity 。活动意味着开始,而不是通过新实例化。如果你有一个你想在不同的地方使用的AsyncTask,那么创建一个从AsyncTask扩展的新顶级类。

(有关创建可重用AsyncTasks的示例,请参阅:https://github.com/levinotik/ReusableAsyncTask)

请注意,如果您需要获取静态嵌套类,那么您尝试使用的语法将起作用。这是因为在这种情况下,外部类实际上只是作为命名空间,但嵌套类,因为它的静态,实际上不需要引用外部类的实例。从而:

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();

是获取静态嵌套类的实例的正确语法。

转载注明原文:从Android中的另一个类调用方法时,“没有封闭的类型实例”错误 - 代码日志