2015-02-11 2 views
-1

Я хочу перезвонить ту же самую асинтаску после ее завершения, как это сделать. Я хочу регулярно синхронизировать свои сообщения с сервера. В настоящее время я использую таймер, чтобы регулярно запускать этот метод, но его не достоин, поэтому я хочу, чтобы перезвонить этот метод после его завершенияперезвонить из задачи async в андроиде, когда он выполняется в первый раз

вот моя асинхронная функция задачи

private class syncMessageFromServer extends AsyncTask<Void, Integer, String> { 

     @Override 
     protected void onPreExecute() { 
      // setting progress bar to zero 
      //progressBar.setProgress(0); 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(Integer... progress) { 

     } 

     @Override 
     protected String doInBackground(Void... params) { 
      return uploadFile(); 
     } 

     @SuppressWarnings("deprecation") 
     private String uploadFile() { 
      String str = ""; 
      HttpResponse response; 
      HttpClient myClient = new DefaultHttpClient(); 
      HttpPost myConnection = new HttpPost("http://192.168.1.2/AndroidApp/GetMessage?loginUserInfoId="+loginUserInfoId+"&recieverUserInfoId="+receiverUserInfoId+"&isPendingToSynce="+true); 

      try { 
       response = myClient.execute(myConnection); 
       str = EntityUtils.toString(response.getEntity(), "UTF-8"); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try{ 
       JSONArray jArray = new JSONArray(str); 
       for(int i = 0; i<=jArray.length()-1; i++) 
       { 
        JSONObject row = jArray.getJSONObject(i); 
        ChatMessage cm = new ChatMessage(); 
        String onlineFileURL = ""; 
        String upFileURL = row.getString("FileAttachedURL").replace(" ", "%20"); 
        String offlineFileURL = ""; 

        if(!upFileURL.isEmpty()) { 
         onlineFileURL = "http://192.168.1.2" + row.getString("FileAttachedURL").replace(" ", "%20"); 
         downloadBitmap(onlineFileURL); 

         String fileName = upFileURL.substring(upFileURL.lastIndexOf('/') + 1, upFileURL.length()); 
         offlineFileURL = Environment.getExternalStorageDirectory() + File.separator + "/Planetskool/Media/Images/" + fileName; 
        } 
        else { 
         offlineFileURL = ""; 
        } 

        /******* Firstly take data in model object ******/ 
        cm.setOriginalMsgThreadId(row.getString("MessageThreadId")); 
        cm.setSenderUserInfoId(row.getString("SenderUserId")); 
        cm.setReceiverUserInfoId(row.getString("MultipleReceiversId")); 
        cm.setMessageStatus("SENT"); 
        cm.setIsPending(0); 
        cm.setMessageText(row.getString("MessageText")); 
        cm.setMediaURL(offlineFileURL); 
        cm.setThumbImage(offlineFileURL); 
        cm.setMediaMIMEType(""); 
        cm.setMediaSize(0); 
        cm.setMediaName(""); 
        cm.setLatitude(""); 
        cm.setLongitude(""); 
        cm.setSendTimeStamp(row.getString("SendTime")); 
        cm.setReceiveTimeStamp(row.getString("ReadTime")); 
        long messageThreadId = db.SendMessage(cm); 

        confirmSyncedToServer(row.getString("MessageId")); 

        chatMessageAdapter.add(cm); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return str; 

     } 

     @Override 
     protected void onPostExecute(String result) { 

      new syncMessageFromServer.execute(); 
      super.onPostExecute(result); 
     } 

    } 
+1

Используйте службы вместо таймера для выполнения задачи синхронизации регулярно –

+0

проверить мой принятый ответ http://stackoverflow.com/questions/23124414/android-auto-refresh-when-new-data-inserted-into-listview/23124493 # 23124493 – Boopathi

ответ

0

Один из способов сделать это, чтобы установить например, как обработчик, и затем эта деятельность повторяет вашу задачу, когда будет вызвана полная. Создайте интерфейс и иметь ваша деятельность реализовать следующим образом:

public interface ResponseInterface { 
    public void processResponse(String output); 
} 

ли ваша деятельность реализовать:

public class Activity implements ResponseInterface { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     MyAsyncTask task = new MyAsyncTack(this); 
     task.execute(); 
     //do other stuff here 
    } 

    @Override 
    public void processResponse(String output) { 
     MyAsyncTask task = new MyAsyncTask(this); 
     task.execute(); 
    } 
} 

и настроить ваш AsyncTask содержать ссылку, как так:

public class MyAsyncTask extends AsyncTask<Void, Integer, String> { 

    public ResponseInterface response; 

    public MyAsyncTask(ResponseInterface response) { 
     this.response = response; 
    } 

    // return the results of the asynctask to the calling method 
    @Override 
    protected void onPostExecute(String result) { 
     //returns null if no response or if error 
     response.processResponse(result); 
    } 
} 
+0

, где я буду прав открытый интерфейс ResponseInterface { public void processResponse (String output); }. –

+0

Добавьте его как отдельный файл класса так, как я обычно это делаю. –

+0

его не обновлять мои сообщения –

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