、次のようにAsynctaskまたはIntentServiceを使用して、あなたのポストのクラスを作成します...秒で
public class PostIntentService extends IntentService implements PostTask.Observer {
private int counter = 0;
private int retry = 2;
private Data mData;
public PostIntentService() {
super("PostIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
mData = (Data) intent.getSerializableExtra("data");
// send updating status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "updating");
sendBroadcast(i);
execute();
counter++;
}
@Override
public void onSuccessPost(String result) {
// send success status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "success");
sendBroadcast(i);
}
@Override
public void onFailedPost(String result) {
if (counter < retry) {
execute();
counter++;
}
else {
// send failed status
Intent i = new Intent();
i.setAction(PostResponseReceiver.ACTION_RESPONSE);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.putExtra("status", "failed");
i.putExtra("data", mData);// for reproduct
sendBroadcast(i);
}
}
private void execute() {
PostTask task = new PostTask(this);
task.execute();
}
}
、ポストが終了意図を受け取る(BroadcastReceiver拡張)あなたのクラスを作成します。
public class PostBroadcastReceiver extends BroadcastReceiver {
public static final String ACTION_RESPONSE = "com.example.android.intent.action.POST_PROCESSED";
private static final int POST_REQUEST = 100;
private Observer mObserver;
public PostBroadcastReceiver(Observer observer) {
mObserver = observer;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getStringExtra("status").equals("updating")) {
}
else if (intent.getStringExtra("status").equals("success")) {
if (mObserver != null) {
mObserver.onPostFinished();
}
}
else if (intent.getStringExtra("status").equals("failed")) {
if (mObserver != null) {
mObserver.onPostFailed();
}
}
}
public interface Observer {
public void onPostFinished();
public void onPostFailed();
}
}
このサービスをマニフェストファイルに登録します。
<service android:name=".PostIntentService" />
このレシーバーをあなたの主な活動のonCreateに登録してください。
IntentFilter filter = new IntentFilter(PostBroadcastReceiver.ACTION_RESPONSE);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new PostResponseReceiver(this);
registerReceiver(receiver, filter);
メインアクティビティで以下のメソッドを実装します。
public void onPostFinished() {
Log.d("onPostFinished", "onPostFinished");
}
public void onPostFailed() {
Log.d("onPostFailed", "onPostFailed");
}
あなたのメインアクティビティのonDestroyでこの受信者を登録解除してください。
unregisterReceiver(receiver);
最後に、ログインアクティビティで転送を実行します。あなたも `現在の1が行き)、専用のログイン活動を行うタスクが完了すると、次に待っているユーザーを保つのどちらか(新しい活動や`仕上げを起動することができますが、あなたは簡単に、このためのBroadcastReceiverを作成することができます
Intent intent = new Intent(this, PostIntentService.class);
intent.putExtra("data", mData);
startService(intent);
バック。 –
あなたは 'Handler'を試しましたか?そうでない場合は、一度お試しください。 –