使用AsyncTasks作为单独的公开课 [英] Using AsyncTasks as separate public classes
问题描述
这个问题是什么,我都问orginally <延续href=\"http://stackoverflow.com/questions/9690055/type-mismatch-cannot-convert-from-asynctask\">here
我试图找到一种更好的方式来传递从的AsyncTask
ArrayList中的活动
(任何活动调用AsyncTask的),所以在我的情况,我有一个 SongsManager.java
延伸到的AsyncTask
,你可以看到下面。
我的问题是,它不返回我的0 songsList
我得到大小...任何想法我失踪或者我需要调整或增加任何code再?
SongsManager.java
公共类SongsManager扩展的AsyncTask&LT;无效,无效的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT;&GT; { 公共接口SongsMasterCallback {
无效showSongList(列表&LT;&HashMap的LT;字符串,字符串&GT;&GT;结果);
} 私人SongsMasterCallback mCallback;
公共SongsManager(SongsMasterCallback回调)
{
mCallback =回调;
} //构造
//公共SongsManager(){}
ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT; songsList =新的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT;();
@覆盖
保护的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT; doInBackground(虚空...... PARAMS)
{
//填充所有数据....
HashMap的&LT;字符串,字符串&GT;地图=新的HashMap&LT;字符串,字符串&GT;();
// .........
songsList.add(地图);
} 返回songsList;
} @覆盖
保护无效onPostExecute(ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT;的结果){
// TODO自动生成方法存根
//super.onPostExecute(result);
mCallback.showSongList(结果);
}
}
main.java
公共类主要活动扩展实现SongsMasterCallback {公共无效showSongList(列表&LT;&HashMap的LT;字符串,字符串&GT;&GT;结果)
{
this.songsList =(ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT;)的结果;
//然后做一些与此列表
}@覆盖
公共无效的onCreate(捆绑savedInstanceState){ 新SongsManager(本).execute();
Log.d(songsSize,字符串:+ songsList.size()); //它显示0?}}
试试这个
公共类SongsManager扩展的AsyncTask&LT;无效,无效的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT;&GT; { 公共接口SongsMasterCallback {
无效showSongList(列表&LT;&HashMap的LT;字符串,字符串&GT;&GT;结果);
} 私人SongsMasterCallback mCallback;
公共SongsManager(SongsMasterCallback回调)
{
mCallback =回调;
} //构造
//公共SongsManager(){}
@覆盖
保护的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT; doInBackground(虚空...... PARAMS)
{
ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT; songsList =新的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT;();
//填充所有数据....
HashMap的&LT;字符串,字符串&GT;地图=新的HashMap&LT;字符串,字符串&GT;();
// ......... 返回地图;
} @覆盖
保护无效onPostExecute(ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT;的结果){
// TODO自动生成方法存根
//super.onPostExecute(result);
songsList.add(结果);
mCallback.showSongList(结果);
}
这是发生,因为你是在UI线程创建songsList的对象,并在后台线程中添加数据。
this question is a continuation of what i have asked orginally here
i am trying to find a better way to pass the ArrayList from AsyncTask
to the Activity
(any activity that calls the AsyncTask) so in my situation i have a SongsManager.java
which extends to AsyncTask
as you can see below.
my question is, It does not returning me the songsList
i am getting size of 0... any idea what i am missing or do i need to tweak or add any code further?
SongsManager.java
public class SongsManager extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
public interface SongsMasterCallback {
void showSongList(List<HashMap<String, String>> result);
}
private SongsMasterCallback mCallback;
public SongsManager (SongsMasterCallback callback)
{
mCallback = callback;
}
// Constructor
//public SongsManager(){ }
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params)
{
//populating all the data....
HashMap<String, String> map = new HashMap<String, String>();
//.........
songsList.add(map);
}
return songsList;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
// TODO Auto-generated method stub
//super.onPostExecute(result);
mCallback.showSongList(result);
}
}
main.java
public class Main extends Activity implements SongsMasterCallback {
public void showSongList(List<HashMap<String, String>> result)
{
this.songsList = (ArrayList<HashMap<String, String>>) result;
// then do something with the list here
}
@Override
public void onCreate(Bundle savedInstanceState) {
new SongsManager(this).execute();
Log.d("songsSize", "string : "+songsList.size()); //it shows 0 ???
}
}
Try this
public class SongsManager extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
public interface SongsMasterCallback {
void showSongList(List<HashMap<String, String>> result);
}
private SongsMasterCallback mCallback;
public SongsManager (SongsMasterCallback callback)
{
mCallback = callback;
}
// Constructor
//public SongsManager(){ }
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params)
{
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
//populating all the data....
HashMap<String, String> map = new HashMap<String, String>();
//.........
return map;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> result) {
// TODO Auto-generated method stub
//super.onPostExecute(result);
songsList.add(result);
mCallback.showSongList(result);
}
This is happening because you are creating object of songsList in UI thread and adding data in background thread.
这篇关于使用AsyncTasks作为单独的公开课的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!