我想为AsyncTask线程创建一个Bundle对象,它仍然不受data
所做的更改的影响(在将其传递给sendMessage()
之后)。
我的代码在调用data
后立即删除sendMessage()
中的值,但我需要将该值发送到服务器。
有人可以提出一种有效的方法,例如一旦data
被传递(它被复制,因为缺少更好的术语)在发送消息的持续时间内并且自己被销毁。
代码
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 :(得分:0)
您可以将数据传递到doInBackground()
,步骤如下:
更改AsyncTask sendTask = new AsyncTask<Bundle, Void, String>()
现在将protected String doInBackground(Void... params)
更改为受保护的字符串doInBackground(Bundle ... params)
gcm.send(PROJECT_NUMBER + "@gcm.googleapis.com", id, params[0]);
sendTask.execute();
更改为sendTask.execute(data);
,以便将其传递给异步任务。