2016-12-27 2 views
0

В настоящее время я работаю в приложении Android, поскольку у меня есть 10 отдельных классов Asynctask для 10 отдельных операций, в том, что пользовательская функция, называемая внутри onPreExecute() и onProgressUpdate() будет одинаковым для всех 10 классов Asynctask. Есть ли другой способ упростить это. Например, у меня есть пользовательская функция с именем «ADD», и на данный момент я вызвал функцию «ADD» в onPreExecute() для всех 10 классов Asynctask, есть ли другой способ упростить это, используя интерфейс или any-other else,Сделать onPreExecute и onProgressUpdate общедоступным для всех классов Asynctask

ответ

3

Создайте один класс BaseAsyncTask, который расширяет AsyncTask. И напишите реализацию ваших и onPreExecute(), и onProgressUpdate() int this.

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); 
     } 
    } 

И в дополнение к этому BaseAsyncTask в вашей всей 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

Хорошо, что ваш ответ намного лучше;) не мог сделать это лучше. – beeb

+0

Спасибо за ваш повтор ... его работы как шарм .... –

0

Создайте базовую задачу async с операциями в onPreExecute() и onProgressExecute(). Затем создайте свои классы задач async (простирайтесь от основной задачи async).

0

, конечно, вы можете создать отдельный класс для всех AsyncTask называет

просто создать класс

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(); 
     } 

    } 
} 

и объявить интерфейс, как этот

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

затем создать Uri в вашем активности и реализовать MyAsyncInterface, а затем внутри процесса вызова onPostExecuteFinish и передать результат процессу processFinish (String output), присутствующему в вашей активности вызова ty

+0

Спасибо за ваш повтор ... его работы как шарм .. .. –

Смежные вопросы