2010-04-09 93 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