在Android中调用另一个类的方法时,“没有包含types的实例”错误

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

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

parsing来自互联网的数据。 但是我需要从另一个类调用这个类的execute()方法。 当试图正确的代码:

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

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

不能使用MainActivitytypes的封闭实例 必须使用封闭的MainActivitytypes的实例来限定分配(egxnew A(),其中x是MainActivity的一个实例)。

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

Solutions Collecting From Web of "在Android中调用另一个类的方法时,“没有包含types的实例”错误"

根据这里的实际错误,如果parseYouTubeAndYahoo类是您的Activity内部的非静态内部类,那么您需要一个封闭类的实例来实例化内部类。 所以,你需要:

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

然而….

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

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

请注意,如果您需要获取静态嵌套类,则尝试使用的语法WOULD可以工作。 这是因为在这种情况下,外部类实际上只是作为一个名称空间,而嵌套类,因为它的静态,实际上并不需要对外部类的实例的引用。 从而:

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

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

我猜你的parseYouTubeAndYahoo类是类MainActivity一个内部类,在Java中,你应该通过new MainActivity().new parseYouTubeAndYahoo()来创build一个内部类的对象new MainActivity().new parseYouTubeAndYahoo() ,所以像这样调用new MainActivity().new parseYouTubeAndYahoo().execute("someURL");方法new MainActivity().new parseYouTubeAndYahoo().execute("someURL");

我也猜MainActivity扩展了Activity类,所以我认为答案应该是this.new parseYouTubeAndYahoo().execute("someURL"); 当你在你的MainActivity类中调用这个方法。

将AsuncTask作为一个单独的类放到另一个文件中会更容易一些。

但是,如果你真的想拥有一个内部类,那么它必须是静态的,或者你需要首先获得对其父类的引用,这可以这样做:

在MainActivity的onCreate:

静态MainActivity activityInstance = getContext();

MainActivity中的新方法:

 public static MainActivity getActivityInstance(){ return activityInstance; } 

然后在另一个活动中,您可以获取该实例并访问其公共方法

MainActivity instanceOfMainActivity = MainActivity.getInstance();

然后

new instanceOfMainActivity.parseYouTubeAndYahoo()。execute(“someURL”);

将活动的上下文引用到其他类并使用它。

像那样:public oneofconstructer(Context ctx,…..)