我一直在尋找如何在一段時間內實現Android的AsyncTask類。基本上,我希望它能夠實現經典的場景:在我進行網絡通話時簡單地創建一個無限期的裝載輪。但是,在實踐中,我遇到了一些問題,使其按我想要的方式工作。Android的AsyncTask:多個參數,返回值,等待
我的代碼看起來像這樣目前:(我期望的AsyncTask實施前)
String result = timeConsumingNetworkCall(String someData, ArrayList stuff1);
doStuff(result);
String result = timeConsumingNetworkCall(String otherData, ArrayList stuff2);
doOtherStuff(result);
String result = timeConsumingNetworkCall(String dataAgain, ArrayList stuff3);
doYetEvenMore(result);
我希望能夠重用我的AsyncTask通話將數據傳遞給它,它使網絡通話,然後返回我可以隨意處理的數據,就像我上面所做的那樣。
現在 - 這個工程是完美的,當然應用程序似乎沒有加載「掛起」。在來的AsyncTask。也許我還沒有完全「得到它」 - 但是如何將數據返回到AsyncTask的外部,以便doStuffToUI()
等可以使用它?
最後,我想,如果我可以使用的AsyncTask與此類似:
String result = new PostToFile("function_name", keysAndValues).execute().getResult();
doStuff(result); // this shouldn't execute until the AsyncTask is done
我要對這個權利?這是應該/可以完成的嗎?下面是我的AsyncTask類,縮寫爲簡潔。
private class PostToFile extends AsyncTask<PostToFile, Void, Void>{
private String functionName;
private ArrayList<NameValuePair> postKeyValuePairs;
private String result = "";
public PostToFile(String function, ArrayList<NameValuePair> keyValuePairs){
functionName= function;
postKeyValuePairs = keyValuePairs;
}
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(BaseActivity.getInstance(), "Loading", "Please wait...", true, false);
}
@Override
protected Void doInBackground(PostToFile... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair(FUNCTION_KEYWORD, functionName));
for (int i = 0; i < postKeyValuePairs.size(); i++) {
nameValuePairs.add(postKeyValuePairs.get(i));
}
try{
// ***do the POST magic.***
result = response.toString();
}
catch (Exception e){
// clean up my mess
}
return null;
}
private String getResult(){
return result; // can I use this somehow???
}
@Override
protected void onPostExecute(Void result) {
progressDialog.dismiss();
}
}
任何幫助表示讚賞,多謝提前。如果需要,我很樂意澄清。
你可以寫doStuff(result);在onPostExtecute()方法 – 2013-03-01 09:11:55
嗯,我真的寧願不這樣做。因爲那樣我就必須在每次想要PostToFile時都有多個AsyncTask對象,這只是基於我如何接收數據。這聽起來很混亂,代碼太多。我只是想把數據放進去,然後解析它。 – 2013-03-01 09:20:46
@ unexpected62我有同樣的問題,如果你已經解決了這個問題,請幫助我如何實現這個 – CoronaPintu 2013-05-27 05:47:46