Android 通过ArrayList<;HashMap<;字符串,字符串>&燃气轮机;在异步任务中
我犯了一点错误,我不知道如何摆脱。 最初,代码是这样的,它可以工作:Android 通过ArrayList<;HashMap<;字符串,字符串>&燃气轮机;在异步任务中,android,android-asynctask,Android,Android Asynctask,我犯了一点错误,我不知道如何摆脱。 最初,代码是这样的,它可以工作: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<HashMap<String, String>> menuItems = new ArrayList&
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
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
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_COST, parser.getValue(e, KEY_COST));
// adding HashList to ArrayList
menuItems.add(map);
}
// Adding menuItems to ListView
ListAdapter adapter = new SimpleAdapter(this, menuItems,
R.layout.list_item,
new String[] { KEY_NAME, KEY_COST }, new int[] {
R.id.name, R.id.cost });
setListAdapter(adapter);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList menuItems=新建ArrayList();
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(URL);//获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(键项);
//循环通过所有项目节点
对于(int i=0;ivalue
put(KEY_ID,parser.getValue(e,KEY_ID));
put(KEY_NAME,parser.getValue(e,KEY_NAME));
put(KEY_COST,parser.getValue(e,KEY_COST));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}
//向ListView添加菜单项
ListAdapter=new SimpleAdapter(此,菜单项,
R.layout.list_项目,
新字符串[]{KEY_NAME,KEY_COST},新int[]{
R.id.name,R.id.cost});
setListAdapter(适配器);
}
既然我加入了另一个活动,我就错了。
通过研究,我发现您需要将taskasync实现UTalizare,但不知道如何结束。
这是代码:
public class TaskAsincrono extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
@Override
protected void onPreExecute(){
}
@Override
protected void onProgressUpdate(Void[] values) {
};
@Override
protected ArrayList<String> doInBackground(ArrayList<String>... params) {
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl = doc.getElementsByTagName(KEY_ITEM);
// looping through all item nodes <item>
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
map.put(KEY_ID, parser.getValue(e, KEY_ID));
map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
map.put(KEY_COST, parser.getValue(e, KEY_COST));
// adding HashList to ArrayList
menuItems.add(map);
}
return menuItems;
}
@Override
protected void onPostExecute(ArrayList<String> success) {
//se l'alert è visibile viene rimosso
if(dialog.isShowing()) dialog.dismiss();
ListAdapter adapter = new SimpleAdapter(this, menuItems,
R.layout.list_item,
new String[] { KEY_NAME, KEY_COST }, new int[] {
R.id.name, R.id.cost });
setListAdapter(adapter);
}
@Override
protected void onCancelled() {
mAuthTask = null;
}
}
公共类任务Asincrono扩展异步任务{
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的void onProgressUpdate(void[]值){
};
@凌驾
受保护的ArrayList doInBackground(ArrayList…参数){
ArrayList menuItems=新建ArrayList();
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(URL);//获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(键项);
//循环通过所有项目节点
对于(int i=0;ivalue
put(KEY_ID,parser.getValue(e,KEY_ID));
put(KEY_NAME,parser.getValue(e,KEY_NAME));
put(KEY_COST,parser.getValue(e,KEY_COST));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}
返回菜单项;
}
@凌驾
受保护的void onPostExecute(ArrayList成功){
//塞勒阿雷特·维恩·里莫索酒店
if(dialog.isShowing())dialog.disease();
ListAdapter=new SimpleAdapter(此,菜单项,
R.layout.list_项目,
新字符串[]{KEY_NAME,KEY_COST},新int[]{
R.id.name,R.id.cost});
setListAdapter(适配器);
}
@凌驾
受保护的void onCancelled(){
mAuthTask=null;
}
}
我该怎么办
非常感谢按照拉古南丹的建议去做吧 如果返回类型是ArrayList
public class TaskAsincrono extends AsyncTask<ArrayList<String>, Void, ArrayList<String>>
公共类任务Asincrono扩展AsyncTask以了解更多信息
最好的问题到底是什么不起作用,我不知道如何将arraylist传递给OnPostExecute。因为返回菜单项;出错doInbackground
计算的结果是onPostExecute
的参数。将您的onpostExecute
parm更改为ArrayList success
也将此AsyncTask
更改,因为它是doInBackground方法的一个参数,您还可以将其保存为AsyncTask的本地成员,稍后在onpostExecute方法中引用它。
public class TaskAsincrono extends AsyncTask<String, Void, ArrayList<HashMap<String,String>>>
@Override
protected ArrayList<String> doInBackground(ArrayList<String>... params)
@Override
protected ArrayList<HashMap<String,String>> doInBackground(String... params)
public class TaskAsincrono extends AsyncTask<String, Void, ArrayList<HashMap<String, String>>> {
@Override,
protected void onPreExecute(){
//what you want to do before AsyncTask execution(runs on UI thread)
......................
}
@Override
protected void onProgressUpdate(Void[] values) {
//About updates..........
};
@Override
protected ArrayList<HashMap<String, String>> doInBackground(String... params) {
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
for (String extraUrl : params) {
//do all stuffs here
//like parse xml stuffs
//put them to hashmap then add the hashmap to arraylist(menuitems)....
}
return menuItems;
}
}
TaskAsincrono task = new TaskAsincrono ();
try {
ArrayList<HashMap<String, String>> arr = new ArrayList<HashMap<String, String>>();
arr = task.execute(URL).get();