2016-08-04 12 views
-2

ich eine nicht-Aktivität Java-Klasse haben ihren Namen AsynClassValue ist, hat es folgenden Code und VerfahrenWie den Programmablauf bis AsyncTask Finish stoppen, die in Tätigkeit darstellt und dass die Aktivität von nicht-Aktivitäts-Klasse aufgerufen wird

public class AsynClassValue 
{ 
    public static int a; 

    public void getValue() 
    { 
      Intent intent = new Intent(MyApplication.getContext(),AsyncActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      MyApplication.getContext().startActivity(intent); 

      System.out.println("value of variable a"+a); 
    } 
} 

Ich beginne die neue Aktivität von dieser Klasse in getValue() Methode.

Ich habe die MyApplication-Klasse verwendet, die den Anwendungskontext hat.

In AsyncActivity ist ein Activity und es hat AsyncTask darin und auf seiner onPostExecute() Methode ich den Wert der statischen Variablen „a“ von AsynClassValue zuweisen und schließlich ich den Wert der Variablen am Drucken „a“ in AsynClassValue Klasse .

Das Problem ist, dass ich den Wert der Variablen "a" bekomme, ist null obwohl die print-Anweisung als nächstes nach dem Start der Absicht ist.

So, wie man den Kontrollfluss des Programms stoppt, bis alle Aufgaben, die nach Aktivitätsklasse beendet werden, mit Absicht und danach mit der nächsten Druckanweisung begonnen haben.

+0

* Wie man den Programmablauf stoppt, bis AsyncTask beendet * indem ich überhaupt nicht AsyncTask – Selvin

Antwort

0

Sie nicht - Stattdessen verschieben Sie die Sachen später (die println in Ihrem Fall) in eine neue Methode. Wenn die Aktivität/AsyncTask beendet ist, rufen Sie diese neue Methode auf (abhängig von der Struktur Ihres Projekts kann dies andere Dinge beinhalten).

Damit Sie am Ende mit etwas wie:

public class AsynClassValue 
{ 
    public static int a; 

    public void getValue() 
    { 
      Intent intent = new Intent(MyApplication.getContext(),AsyncActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      MyApplication.getContext().startActivity(intent); 
    } 

    public void doLater() 
    { 
      System.out.println("value of variable a"+a); 
    } 
} 

Sie nach Beendigung der Angabe 'a' den richtigen Wert in OnPostExecute(), dann ordnen doLater() aufzurufen. In diesem Beispiel können Sie Dinge vereinfachen, indem Sie doLater() statisch machen, aber das wird in komplizierteren Situationen nicht funktionieren.

+0

benutze ich möchte diese Variable "a" von getValue() -Methode in einer anderen Klasse zurückgeben, aber die return-Anweisung wird zuerst ausgeführt, bevor int und ich bekomme der Nullwert für die Variable "a". –

+0

Grundsätzlich können Sie getValue() nicht pausieren, ohne dass Ihre App einfriert, bis die Hintergrundaufgabe abgeschlossen ist. Sie müssen verwenden, wo Sie beabsichtigen, "a" zu verwenden und dort ein Äquivalent von doLater() zu erstellen, möglicherweise auch andere Methoden aufteilend. –

+0

Ich möchte den Kontrollfluss von getValue() behalten, bis die Variable "a" den Wert in onPostExecute zugewiesen bekommt, können wir dies mit threading tun, habe ich Thread.sleep (1000) versucht, aber es auch Sleep Intent und Hintergrund Task, Wie können wir den Programmfluss mit Thread stoppen, ohne die Hintergrundaufgabe zu stoppen? –