2016-11-09 3 views
-1

Ich bin relativ neu (ish) zu Java ..Android Klasse mit verschachtelten AsyncTask

ich eine Android-App schreibe, und jetzt werde ich wieder über meinen Code und aufzuräumen und die Einhaltung meiner Codierungsstruktur zu einer Best-Practice-Stil.

Ich erstelle Methoden und Klassen, wie ich es für richtig halte, um die zahlreichen Mengen doppelten Codes zu vermeiden, die ich produziert habe. Ich habe versucht, eine Klasse zu erstellen (z. B. HeavyStuff.java), die mehrere AsyncTask-Methoden enthält (z. B. MyTask1 und MyTask2). Wenn ich die Klasse von einer Aktivität aus anrufe, möchte ich MyTask1 irgendwann ausführen, und an einem anderen Punkt möchte ich MyTask2 ausführen. Ich versuche, die folgenden jeweils zu verwenden:

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

Und

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

Das Problem ist, ich erhalte eine Fehlermeldung, dass „HeavyTest ist keine einschließenden Klasse“. Meine Klasse sieht wie folgt aus:

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> { 
     //... 
     //... 
    } 
} 

Die Klasse auch in vollem Umfang hier zu sehen ist: http://hastebin.com/yahihokupu

Was mir fehlt, was erforderlich ist die Klasse eine „umschließenden Klasse“ zu machen.

----- ----- EDIT

Ich habe in der Antwort gesucht, die als mögliches Duplikat auf meine Frage gegeben wurde, und es funktioniert nicht. Die gegebene Antwort empfiehlt, static für meine innere Klasse zu verwenden, aber das funktioniert nicht für mich.

Ich habe jedoch festgestellt, dass ich das tun kann:

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

Es funktioniert, aber was sind die Auswirkungen (falls vorhanden), wenn es, wie dies zu tun? Ist es eine schlechte Übung?

+2

Mögliches Duplikat [Ist das nicht ein umschließenden Klasse Java] (http://stackoverflow.com/questions/20252727/ist-nicht-einschließende-Klasse-Java) – earthw0rmjim

Antwort

0

Ich habe eine Antwort auf meine Frage gefunden. Ich stellte ursprünglich, was ich glaube, eine Lösung als bearbeiten, aber zu klären, das ist meine Arbeits Antwort:

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

Ich verstehe, dass Sie beide MyTask1 und MyTask2 in die gleiche Klasse, weil sie ähnlich sind, aber im Allgemeinen ist dies nicht ideal.

Wenn Sie auf die Schaffung neuer Instanzen von MyTask1 und auch neue Instanzen von MyTask2 gesamten Codebasis planen, dann sollten sie in ihren eigenen völlig getrennte Klassen (d MyTask1.java nur Klasse enthält MyTask1).

Sie können immer noch halten sie „zusammen“, indem sie innerhalb der gleichen Java-Paket, zum Beispiel setzen:

package.heavystuff 

.