2010-04-09 85 views
2

我想实现在Android应用中的以下简单的模式:如何在android中实现异步http-post请求?

  1. 活动一开始活动B
  2. 在活动B中的用户填写一个简单的表格F,则点击提交
  3. 活动B然后启动将F发布到url的AsyncTask C,并立即返回到活动A
  4. 回到活动A中,用户继续照常工作,而C仍在工作。但是一旦C完成,应该通知用户,特别是如果结果失败。

我遇到的问题是步骤3和步骤4.由于C由B启动,A如何得到通知?嗯,不知道这是明确的任何人,但我...

反正现在我坚持了一个解决方案,第3步,而不是看起来是这样的:

3" 活动B返回的内容然后启动AsyncTask C发布表单并继续照常

但是A似乎也有必要处理表单,它应该是B的责任。或解决方案?

回答

0

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

没关系,我刚才在你的描述中看到了。但是 - B处理所有 - A仅将数据提交到URL。

+0

是的,最终我认为我可以忍受这一点。由于表单只是一组字符串对,A真的不需要知道任何关于它的任何信息。 – hermo 2010-04-09 16:53:41

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。

在您的应用程序清单的意图过滤器添加到您的活动一进入 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> 

在活动注册一个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); 
+0

谢谢。我还没有看过广播,只是似乎有点矫枉过正,因为我只有一个接收器:) – hermo 2010-04-09 16:59:56