2016-03-16 137 views
1

當用戶點擊按鈕我調用這個方法,我想做多個AsyncTask調用上傳不同的東西。 (一些文字,照片,然後是視頻)。我執行第一個方法罰款(文本),但然後我不能開始下一個調用/執行(backgroundTask.execute),因爲第一個沒有完成。多次執行AsyncTask? [Android]

我的問題:

我怎麼能說我的AsyncTask,所以我可以一次上傳的一切嗎? (點擊一個按鈕)

我想有它設置等等onPostExecute我更新一個變量,然後在這個方法中,我有一個簡單的,如果看到檢查語句,如果該變量已經改變,但它顯然不是招」工作。

我是否應該等待每個人完成開始下一個或我應該在同一時間?

的Android代碼:

public void UploadEverything(String encodedImage){ 
    //Gets the email form the user 
    SharedPreferences UserCredentials = getSharedPreferences("UserCredentials", Context.MODE_PRIVATE); 
    ProductOwnerEmail = UserCredentials.getString("UserEmail", ""); 


    String method = "ProductDetails"; 
    BackgroundTask backgroundTask = new BackgroundTask(this); 
    backgroundTask.execute(method, ProductOwnerEmail, ProductName, Seller_Category, ProductKeyCode, DescriptionPoint, DescriptionPoint2, DescriptionPoint3); 


    if (BackgroundTask.DetailsUploaded.equals("true")) { 
     String PhotoMethod = "Photo"; 
     //BackgroundTask backgroundTask = new BackgroundTask(this); 
     backgroundTask.execute(PhotoMethod, ProductOwnerEmail, ProductName, encodedImage); 
    } 


    if(BackgroundTask.PhotoUploaded.equals("true")) { 
     String SevenSecVideoMethod = "7secVideo"; 
     //BackgroundTask backgroundTask = new BackgroundTask(this); 
     backgroundTask.execute(SevenSecVideoMethod, ProductOwnerEmail, ProductName, String.valueOf(selectedPath)); 
    } 




    Toast.makeText(SellerHomePage.this, "Product has been uploaded!", Toast.LENGTH_SHORT).show(); 
} 
+1

你是什麼意思你「不能開始下一個」?有沒有崩潰?什麼阻止你? –

+0

完成後,無法再次啓動同一個線程。您需要創建AsyncTask的另一個對象並調用它的execute方法。 –

+0

爲什麼你要多次調用AsyncTask,如果你可以一次發佈所有東西? – Apurva

回答

1

你的問題還不清楚,但我的理解是 - 你要上傳您的上的一個按鈕點擊的所有數據。因此,這裏是你如何能做到這一點,

如果按鈕單擊事件撥打電話到您的AsyncTask

@Override 
public void onClick(View v) { 
    yourAsyncTask.execute(); 
} 

現在它將會執行你的AsyncTask,所以在您的AsyncTask的onPreExecute()方法,你可以獲取所有的數據,你想要上傳。

@Override 
public void onPreExecute() { 
    field1 = //Some Text; 
    field2 = //Any Image; 
    field3 = //Any Video; 
} 

現在在doInBackground()方法,你可以上傳所有領域,無論你想要的。

0

AsyncTask實例只能一次使用。

您可以創建新實例並使用它,但不能在多個時間使用相同的實例,它會產生運行時錯誤。

execute(Params...)必須在UI線程上調用。

- 請勿手動撥打onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)

所以,你可以上傳所有的東西在一個的AsyncTask ..

0

只是爲了信息,如果你有這樣的數據在隊列中上傳和服務器同步,使用服務或一個單獨的線程和處理它。正如你可能知道'Volley'庫提供了相當不錯的整合(無縫)與RequestQueue,但我沒有嘗試上傳視頻。 只是檢查this link