2015-09-17 54 views
0

我想將它傳遞給sendMessage()後創建的AsyncTask線程捆綁對象,它仍然不受變化data( 我的代碼調用sendMessage()後立即刪除在data值,但我需要的是價值被送到服務器。 有人建議一種有效的方式,這樣,一旦data傳遞(它被複制中,對於沒有更好的詞)來發送消息的持續時間和被摧毀自身。
CODE如何將一個Bundle傳遞給另一個對象(僅限於AsyncTask Thread)?

public void sendMessage(final Bundle data) 
{ 
    sendTask = new AsyncTask<Void, Void, String>() 
    { 
     @Override 
     protected String doInBackground(Void... params) 
     { 
      String id = Integer.toString(msgId.incrementAndGet()); 
      try 
      { 
       Log.d(TAG, "message_id: " + id); 
       gcm.send(PROJECT_NUMBER + "@gcm.googleapis.com", id, data); 
      } 
      catch (Exception e) 
      { 
       Log.d(TAG, "Exception: " + e); 
       e.printStackTrace(); 
      } 
      return "GCM send is a success"; 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
      super.onPostExecute(result); 
      sendTask = null; 
      Log.d(TAG, "Result = " + result); 
      Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show(); 
     } 
    }; 
    sendTask.execute(); 
} 

回答

0

您可以將數據傳遞給doInBackground(),這裏的步驟:

  • 通過的AsyncTask接受更改參數類型sendTask = new AsyncTask<Bundle, Void, String>()

  • 現在改變protected String doInBackground(Void... params)受保護的字符串doInBackground(包... PARAMS)

  • 您可以使用gcm.send(PROJECT_NUMBER + "@gcm.googleapis.com", id, params[0]);
  • 也可以將sendTask.execute();更改爲sendTask.execute(data);將其傳遞給Asyn c任務。
+0

是的,我知道,但我想知道這種方法是否使params [0]免於對數據做任何修改? –

相關問題