Eug*_*gun 23 methods android instance android-asynctask
同事们,我有这样的问题:1.在我的第一堂课我有
public class parseYouTubeAndYahoo extends AsyncTask<String, Void, List<VideoDataDescription>>
Run Code Online (Sandbox Code Playgroud)
解析来自互联网的数据.但我需要从另一个类调用此类的execute()方法.在尝试修正此类代码时:
new MainActivity.parseYouTubeAndYahoo().execute("someURL");
Run Code Online (Sandbox Code Playgroud)
我有来自Eclipse的下一条错误消息
不能访问类型为MainActivity的封闭实例.必须使用MainActivity类型的封闭实例限定分配(例如,xnew A(),其中x是MainActivity的实例).
真的,这个问题笼罩在迷雾中.那么,如何从另一个类调用此方法?
Lux*_*ode 54
就这里的实际错误而言,如果parseYouTubeAndYahooclass是Activity内部的非静态内部类,那么你需要一个封闭类的实例来实例化内部类.所以,你需要:
MainActivity myActivity = new MainActivity();
MainActivity.parseYouTubeAndYahoo asyncTask = myActivity.new parseYouTubeAndYahoo();
Run Code Online (Sandbox Code Playgroud)
然而....
你真的不应该从你的外部实例化你的活动的非静态内部类,Activity因为为了实例化一个非静态的内部类,你必须实际实例化封闭类,在这种情况下,它是Activity.活动意味着开始,而不是通过实例化new.如果你AsyncTask想在不同的地方使用它,那么创建一个新的顶级类,从中扩展AsyncTask.
(有关创建可重用的示例AsyncTasks,请参阅:https://github.com/levinotik/ReusableAsyncTask)
请注意,如果您需要获取静态嵌套类,那么您尝试使用的语法将起作用.这是因为在这种情况下,外部类实际上只是作为命名空间,但嵌套类,因为它的静态,实际上不需要引用外部类的实例.从而:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();
Run Code Online (Sandbox Code Playgroud)
是获取静态嵌套类的实例的正确语法.
| 归档时间: |
|
| 查看次数: |
38791 次 |
| 最近记录: |