我想在 Android 应用程序中实现以下简单模式:
- Activity A 启动 Activity B
- 在 Activity B 中,用户填写了一个简单的表单 F,然后点击提交
- 然后,Activity B 启动一个 AsyncTask C,将 F 发布到某个 URL,并立即返回到 Activity A
- 回到 Activity A,用户继续照常工作,而 C 仍在工作。但是一旦 C 完成,就应该通知用户,特别是如果结果失败。
我遇到的问题是第3步和第4步。由于C是由B启动的,那么A如何才能得到通知?嗯,不确定除了我之外其他人是否都清楚......
无论如何,现在我遇到了一个解决方案,其中步骤 3 看起来像这样:
3"。 Activity B 将表单内容返回给 Activity A。然后 A 启动 AsyncTask C 来发布表单并照常继续。
但是A也需要处理表单似乎有点不必要,它应该只是B的责任。还有其他想法或解决方案吗?
最佳答案
我会使用广播接收器。 http://d.android.com/reference/android/content/BroadcastReceiver.html
在 Activity B 中
Intent broadcastIntent = new Intent("com.yourapppackage.BROADCAST");
broadcastIntent.putExtra("myExtras", myExtras.extra); // Put your results in here
sendBroadcast(broadcastIntent);
从 AsyncTask 的 onPostExecute 触发此操作。
在您的应用程序 list 中,将 Intent 过滤器添加到您的 Activity A 条目中 http://developer.android.com/guide/topics/manifest/intent-filter-element.html
<activity android:name=".A"
>
<intent-filter>
<action android:name="com.yourapppackage.BROADCAST" />
</intent-filter>
</activity>
在 Activity A中注册一个BroadcastReceiver http://developer.android.com/reference/android/content/BroadcastReceiver.html
// Set up a handler and a broadcast reciever
private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Handle reciever
String mAction = intent.getAction();
if(mAction.equals("com.yourapppackage.BROADCAST")) {
// Do something with the results - intent.getExtras();
}
}
}
// Register a reciever
IntentFilter myRecieverIntentFilter = new IntentFilter();
myRecieverIntentFilter.addAction("com.yourapppackage.BROADCAST");
this.registerReceiver(mIntentReceiver, myRecieverIntentFilter, null, mHandler);
关于android - android中如何实现异步http-post请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2608656/