2016-11-09 70 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