[英]AsyncTask with ArrayList as return type
I am trying to return an ArrayList from an AsyncTask.我正在尝试从 AsyncTask 返回一个 ArrayList。 But in main activity i am not able to get the returned arraylist.但在主要活动中,我无法获得返回的数组列表。 I want to know the way to call the asynctask so that i can get the returned arraylist.我想知道调用 asynctask 的方法,以便我可以获得返回的数组列表。
This is the 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;
}
}
In MainActivity, i am calling the output as --在 MainActivity 中,我将输出称为-
ArrayList<String> adDetails = new ArrayList<>();
mBannerTask = new GetBannerDB();
adDetails = mBannerTask.execute();
But here i am getting error - Incompatible types.但在这里我收到错误 - 不兼容的类型。
Ashok as per your answer, i have done the following changes -- Ashok 根据您的回答,我进行了以下更改-
OnDataListener.java (As interface) OnDataListener.java(作为接口)
public interface OnDataListener {
void setData(ArrayList<String> result);
}
In MainActivity.java -在 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();
}
......
}
But its giving error.但它给出了错误。
public interface OnDataListner{
void setData(ArrayList<String> result);
}
and和
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);
}
}
finally最后
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.