2016-12-27 1 views
0

Derzeit arbeite ich in Android-Anwendung, in dem ich 10 separate Asynctask-Klasse für 10 separate Operation, in dem die benutzerdefinierte Funktion namens onPreExecute() und onProgressUpdate() wird für alle 10 Asynctask-Klassen gleich sein. Gibt es einen anderen Weg, dies zu vereinfachen? Zum Beispiel habe ich eine benutzerdefinierte Funktion namens "ADD", und ab sofort habe ich die "ADD" -Funktion in onPreExecute() aller 10 Asynctask-Klasse aufgerufen, gibt es eine andere Möglichkeit, dies zu vereinfachen, indem Sie die Schnittstelle oder verwenden any-other sonst,Machen Sie onPreExecute und onProgressUpdate für alle Asynctask-Klasse gemeinsam

Antwort

3

Erstellen Sie eine Klasse, die BaseAsyncTask ist, die AsyncTask erweitert. Und schreiben Sie die Implementierung Ihrer beiden onPreExecute() und onProgressUpdate() int dies.

public abstract class BaseAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> { 

     @android.support.annotation.Nullable 
     private ProgressDialog progressDialog = null; 
     public Activity activity; 

     public BaseAsyncTask(Activity activity) { 
      this.activity = activity; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressDialog = new ProgressDialog(activity, R.style.CustomProgressSpinner); 
      CommonUtilities.showDialog(progressDialog,activity); 
     } 

    @Override 
    protected void onProgressUpdate(Progress... values) { 
     super.onProgressUpdate(values); 
    } 

     @Override 
     protected void onPostExecute(Result result) { 
      super.onPostExecute(result); 
      CommonUtilities.dismissDialog(progressDialog); 
     } 
    } 

Und erweitern, dass BaseAsyncTask in Ihrem All AsyncTask.

public class AttachmentLoadTask extends BaseAsyncTask<DocumentVO, Void, File> {@Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected File doInBackground(DocumentVO... documentVOs) { 
     File file = null; 
     return file; 
    } 

    @Override 
    protected void onProgressUpdate(Progress... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(File file) { 

     super.onPostExecute(file); 

    }} 
+0

Nun Ihre Antwort ist viel besser;) könnte es nicht besser – beeb

+0

Danke für Ihre Wiederholung ... es funktioniert wie ein Charme .... –

0

Erstellen eine einfache Asynchron-Aufgabe mit den Operationen in OnPreExecute() und onProgressExecute(). Erstellen Sie anschließend Ihre asynchronen Taskklassen (ausgehend von der grundlegenden asynchronen Task).

0

sicher, können Sie eine einzelne Klasse schaffen für alle AsyncTask ruft

erstellen Sie einfach eine Klasse

public class MyConnectionClass extends AsyncTask<Uri, Void, Boolean> { 
    MyAsyncInterface delegate = null; 
    HttpURLConnection httpURLConnection; 
    String output; 

    public MyConnectionClass(MyAsyncInterface myAsyncInterface) { 
     delegate = myAsyncInterface; 
    } 

    @Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean aBoolean) { 
     delegate.processFinish(output); 
     super.onPostExecute(aBoolean); 

    } 

    @Override 
    protected Boolean doInBackground(Uri... uris) { 
     try { 
      URL url = new URL(uris[0].toString()); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setDoInput(true); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.connect(); 
      InputStream inputStream = httpURLConnection.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); 
      String line = null; 
      StringBuilder builder = new StringBuilder(); 
      while ((line = reader.readLine()) != null) { 
       builder.append(line); 

      } 
      output = builder.toString(); 
      return true; 


     } catch (MalformedURLException e) { 
      output = e.getMessage(); 
      return false; 

     } catch (IOException e) { 
      output = e.getMessage(); 
      return false; 

     } finally { 
      httpURLConnection.disconnect(); 
     } 

    } 
} 

und erklären eine Schnittstelle wie diese

public interface MyAsyncInterface { 
    void processFinish(String output); 
} 

dann eine Uri erstellen in Ihrem aktiviere und implementiere MyAsyncInterface dann innerhalb des onPostExecute call processFinish und gib die Ausgabe an die processFinish (String output) -Methode weiter, die in deiner aufrufenden Aktivität vorhanden ist ty

+0

Danke für Ihre Wiederholung ... es funktioniert wie ein Charme .. .. –

Verwandte Themen