如何在android中实现异步http-post请求?

时间:2010-04-09 15:26:28

标签: android http post asynchronous

我想在Android应用程序中实现以下简单模式:

  1. 活动A开始活动B
  2. 在活动B中,用户填写简单表格F,然后点击提交
  3. 活动B然后启动一个将F发布到网址的AsyncTask C,并立即返回活动A
  4. 返回活动A,当C仍在工作时,用户继续照常营业。但是一旦C完成,应该通知用户,特别是如果结果是失败的话。
  5. 我遇到的问题是步骤3和4.由于C是由B启动的,A如何得到通知?嗯,不确定除了我之外是否对任何人都清楚......

    无论如何,现在我遇到了一个解决方案,其中第3步看起来像这样:

    3“。活动B将表单内容返回给活动A.然后启动AsyncTask C发布表单并继续照常进行。

    但是A似乎有点不必要A也需要处理表格,它应该只是B的责任。还有其他任何想法或解决方案吗?

3 个答案:

答案 0 :(得分:2)

我会使用广播接收器。 http://d.android.com/reference/android/content/BroadcastReceiver.html

在活动B中

Intent broadcastIntent = new Intent("com.yourapppackage.BROADCAST");
broadcastIntent.putExtra("myExtras", myExtras.extra); // Put your results in here
sendBroadcast(broadcastIntent);

从AsyncTask的onPostExecute中激活它。

在您的应用程序清单中,为您的活动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>

在活动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);

答案 1 :(得分:1)

答案 2 :(得分:0)

为什么不让B获取运行任务所需的信息,然后将其传递给A? onPreExecute()和onPostExecute()发生在Activity A的主线程中。

没关系,我刚刚在你的描述中看到过。但是 - B处理全部 - 只需将数据提交到URL。