2016-11-09 65 views
-1

我是比较新的(ISH)到Java ..的Android类嵌套的AsyncTask

我写一个Android应用程序,现在我过我的代码走去,整理和坚持我的编码结构,以更最佳实践风格。

我正在构建方法和类,因为我认为适合避免我生成的大量重复代码。我发现自己试图创建一个包含几个AsyncTask方法的类(例如HeavyStuff.java)(例如MyTask1和MyTask2)。当从一个activity中调用这个类时,我想在某个时候执行MyTask1,并且在其他地方我想执行MyTask2。我试图使用分别如下:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff.MyTask1(); 
myTask1.execute(); 

而且

HeavyStuff.MyTask2 myTask2 = new HeavyStuff.MyTask2(); 
myTask2.execute(); 

的问题是,我得到一个错误,指出“HeavyTest不是一个封闭类”。我的阶级是这样的:

package com.wizzkidd.myapp; 

import android.os.AsyncTask; 

public class HeavyStuff { 

    public class MyTask1 extends AsyncTask<String, String, String> { 
     //... 
     //... 
    } 

    public class MyTask2 extends AsyncTask<String, String, String> { 
     //... 
     //... 
    } 
} 

类也可以在这里看到满:http://hastebin.com/yahihokupu

我缺少所需使课堂的“封闭班”。

----- -----编辑

我看着那个被给了作为一个可能重复我的问题的答案,这是行不通的。给出的答案建议使用static为我的内部类,但这不适合我。

我也不过发现我可以这样做:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1(); 
myTask1.execute(); 

它的工作原理,但会造成什么影响这样做时,它(如果有的话)?这是不好的做法吗?

+2

的可能的复制[不是一个封闭级的Java(http://stackoverflow.com/questions/20252727/IS-不-AN-包围级-java的) – earthw0rmjim

回答

0

我找到了我的问题的答案。我最初发布什么,我相信这是一个解决方案作为一个编辑,而是要澄清,这是我工作的回答:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1(); 
myTask1.execute(); 
0

我知道你把MyTask1MyTask2放到同一个类中,因为它们是相似的,但是通常这并不理想。

如果您计划在整个代码库创建的MyTask2MyTask1和新的实例的新实例,那么就应该在自己完全独立的类(即MyTask1.java只含类MyTask1)。

,您仍然可以通过将它们同一个Java包内,例如让他们“在一起”:

package.heavystuff