java - Externe AsyncTask-Klasse mit ProgressDialog




android android-asynctask (2)

** Aktualisiert: (Siehe unten) ** Ich habe mich seit einigen Tagen umgesehen und kann keine klare Antwort darauf finden. Einige sagen, dass es einigen möglich ist, zu sagen, dass es nicht so ist. Ich bin verrückt danach.

Was ich will, ist nur die AsyncTaskTask zeigen eine Fortschrittsanzeige eine externe Klasse. Dazu gebe ich den Kontext weiter, wie Sie in der Hauptklasse sehen können. Aber was auch immer ich versuche, NullPointerException ich NullPointerException .

Arbeitscodebeispiele werden geschätzt. Vielen Dank

Mit Android 2.2 übrigens.

Main:

import android.app.Activity;
import android.os.Bundle;

public class AsyncDemo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new AsyncClass(this).execute();
    }
}

AsyncClass.java

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.SystemClock;

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog = new ProgressDialog(context);

    public AsyncClass(Context cxt) {
        context = cxt;
    }

    @Override
    protected void onPreExecute() {
        dialog.setTitle("Please wait");
        dialog.show();
    }

    @Override
    protected Void doInBackground(Void... unused) {
        SystemClock.sleep(2000);
        return (null);
    }

    @Override
    protected void onPostExecute(Void unused) {
        dialog.dismiss();
    }
}

Update: Ich habe eine Follow-up-Frage: Mit dem obigen Code ist es möglich, einen Wert aus der onPostExecute-Methode zurück in die Hauptklasse, irgendwie? (Tut mir leid, dass ich noobish bin) Ich habe so etwas probiert:

String result = new AsyncClass(this).execute();

und dann eine Methode, die einen String zurückgibt. Aber ich kann das nicht, weil ich:

Type mismatch: cannot convert from AsyncTask<String,Void,Void> to String

Was kann ich tun, um dieses Problem anzugehen? Vielen Dank.


Sie haben den ProgressDialog mit einem Nullkontext erstellt. Der folgende Code funktionierte für mich.

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog;

        public AsyncClass(Context cxt) {
            context = cxt;
            dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            dialog.setTitle("Please wait");
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... unused) {
            SystemClock.sleep(2000);
            return (null);
        }

        @Override
        protected void onPostExecute(Void unused) {
            dialog.dismiss();
        }
    }

Ich möchte diese Folgefragen beantworten, dh

Ich habe eine Follow-up-Frage: Mit dem oben genannten Code, ist es möglich, einen Wert aus der onPostExecute-Methode zurück in die Hauptklasse, irgendwie? (Tut mir leid, dass ich noobish bin) Ich habe so etwas probiert:

String result = new AsyncClass(this).execute();

Ich habe das in meinem Code getan, es hat funktioniert.

AsyncClass ac=new AsyncClass();

ac.execute("");

String rslt=ac.get();

Rufen Sie diesen Code an, wo immer Sie möchten.

public class AsynchClass extends AsyncTask <String,Integer,String>
{

    public String result=null;


    @Override
    protected void onPreExecute() {
    // TODO Auto-generated method stub  

    }

    protected String doInBackground(String... params) 
    {

            // Do all your background task here

            return result;

    }
    @Override

    protected void onProgressUpdate(Integer... values) {


    }

    protected void onPostExecute(String result) {

    }
}