2015-02-11 55 views
-1

我想在完成后回调相同的asynctask,我该怎么做。我想定期从服务器同步我的消息。目前我使用计时器定期运行该方法,但它不值得,所以我想它的完成从第一次执行的android异步任务回调

这里之后再打这个方法是我异步任务功能做

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

使用服务,而不是定时运行同步任务定期 – 2015-02-11 05:47:58

+0

检查我接受的答案http://stackoverflow.com/questions/23124414/android-auto-refresh-when-new-data-inserted-into-listview/23124493 #23124493 – Boopathi 2015-02-11 06:24:48

回答

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

我在那里对 public interface ResponseInterface public void processResponse(String output); }。 – 2015-02-11 06:02:39

+0

将它作为一个单独的类文件添加是我通常这样做的方式。 – 2015-02-11 06:05:05

+0

它没有更新我的信息 – 2015-02-11 06:08:44