更新轉換基於@湯姆解決方案:類型不匹配:不能從的AsyncTask
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 ???
}
}
末
I a M於一類的工作使用的AsyncTask及以下就是我收到的時候我嘗試執行
錯誤是在設計的時候,所以沒有logcat的
這裏是類:
SongManager。 java的
public class SongsManager extends AsyncTask<Void, Void, ArrayList<HashMap<String, String>>> {
// Constructor
public SongsManager(){ }
@Override
protected ArrayList<HashMap<String, String>> doInBackground(Void... params) {
// TODO Auto-generated method stub
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
Xml_Parser_Custom_Listview parser = new Xml_Parser_Custom_Listview();
String xml = parser.getXmlFromUrl(URL); // getting XML from URL
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_NAME);
// looping through all song nodes <song>
for (int i = 0; i < nl.getLength(); i++) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
// adding each child node to HashMap key => value
//adding the rows into to the map...
// adding HashList to ArrayList
songsList.add(map);
}
return songsList;
}
}
main.java文件
試圖執行的AsyncTask:
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
songsList = new SongsManager().execute();
這裏是錯誤:
Type mismatch: cannot convert from AsyncTask<Void,Void,ArrayList<HashMap<String,String>>> to ArrayList<HashMap<String,String>>
我怎麼會在main.java文件調用?我嘗試像這樣調用'songsList1 = new SongsManager()。execute();'但是仍然得到相同的錯誤信息......執行onPostExecute – 2012-03-13 18:54:19
@AbuHamzah從'execute()返回的值不是你的結果後臺任務;這是任務本身。不要試圖將其分配給結果類型的變量。你的用戶界面線程需要暫時停下來,而沒有結果。當結果可用時,任務的'onPostExecute'將被調用,並且您可以在那個時候更新UI。 – 2012-03-13 19:03:52
我明白了,但我的用戶界面依賴於'songsList'變量,所以我不確定UI是如何更新'songsLits' – 2012-03-13 19:06:55