[英]AsyncTask with ArrayList as return type
我正在嘗試從 AsyncTask 返回一個 ArrayList。 但在主要活動中,我無法獲得返回的數組列表。 我想知道調用 asynctask 的方法,以便我可以獲得返回的數組列表。
這是 AsyncTask -
public class GetBannerDB extends AsyncTask<Void, Void, ArrayList<String>> {
GetBannerDB() {
}
@Override
protected ArrayList<String> doInBackground(Void... params) {
InputStream is = null;
ArrayList<String> bannerList = new ArrayList<String>();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("data", "data"));
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("url to fetch data");
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
serverResult = sb.toString().trim();
try {
String sResult = serverResult.substring(0, 7);
if (sResult.equalsIgnoreCase("success")) {
// Creating user login session
// Use user real data
String[] temp = serverResult.split("\\^");
String banner_image = temp[1];
String banner_redirect = temp[2];
bannerList.add(banner_image);
bannerList.add(banner_redirect);
} else {
}
} catch (NullPointerException ex) {
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bannerList;
}
@Override
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
mBannerTask = null;
}
}
在 MainActivity 中,我將輸出稱為-
ArrayList<String> adDetails = new ArrayList<>();
mBannerTask = new GetBannerDB();
adDetails = mBannerTask.execute();
但在這里我收到錯誤 - 不兼容的類型。
Ashok 根據您的回答,我進行了以下更改-
OnDataListener.java(作為接口)
public interface OnDataListener {
void setData(ArrayList<String> result);
}
在 MainActivity.java -
public class PushAds implements OnDataListener{
String serverResult = null;
private GetBannerDB mBannerTask = null;
ArrayList<String> adDetails = new ArrayList<>();
public void displayAds()
{
mBannerTask = new GetBannerDB(new OnDataListener {
public void setData(ArrayList<String> result){
adDetails = result;
}
});
mBannerTask.execute();
}
......
}
但它給出了錯誤。
public interface OnDataListner{
void setData(ArrayList<String> result);
}
和
public class GetBannerDB extends AsyncTask<Void, Void, ArrayList<String>> {
public OnDataListner dataListner;
GetBannerDB(OnDataListner dataListner) {
this.dataListner = dataListner;
}
@Override
protected void onPostExecute(ArrayList<String> result) {
super.onPostExecute(result);
dataListner.setData(result);
}
}
最后
ArrayList<String> adDetails = new ArrayList<>();
mBannerTask = new GetBannerDB(new OnDataListner{
@Overrid
public void setData(ArrayList<String> result){
adDetails = result;
//do something
}
});
mBannerTask.execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.