我想解析xml所以我写的代码工作到2.3但是在最新版本它不起作用所以我读了关于asynctask我修改了我的代码但我的imageview仍然是空白的我没有在logcat上得到任何错误意味着Asynctask的实施存在问题。
{
setContentView(R.layout.actionbar);
String URL = "http://ws.audioscrobbler.com/2.0/?method=artist.search&artist=ricky_martin&api_key=97855e265470056987425832aa9aa81&limit=" + 1 + "&page=" + 1;
new FetchXMLAsyncTask().execute(URL);
icon = (ImageView) findViewById(R.id.icon);
}
class FetchXMLAsyncTask extends AsyncTask<String, Void, Void> {
String name;
@Override
protected Void doInBackground(String... params) {
try {
// TODO Auto-generated method stub
final String Artist = "artist";
final String KEY_NAME = "name";
final String API = "b25b959554ed76058ac220b7b2e0a026";
final String KEY_IMAGE ="image";
//final String KEY_COST = "cost";
//final String KEY_DESC = "description";
String URL = params[0];
XmlParser parser = new XmlParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr;
expr = xpath.compile("//image[@size=\"large\"]");
NodeList nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
// looping through all item nodes <item>
for (int i = 0; i < nl.getLength(); i++) {
Element e = (Element) nl.item(i);
String name = parser.getValue(e, KEY_NAME);// name child value
image = parser.getValue(e, KEY_IMAGE);
// Toast.makeText(this, "name"+name+"url"+image, Toast.LENGTH_SHORT).show();
} }catch (XPathExpressionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//do something after parsing is done
URL thumb_u;
try {
thumb_u = new URL(image);
Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
icon.setImageDrawable(thumb_d);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
启动Honeycomb AsyncTasks默认情况下一次启动。也许你有一些其他的任务正在等待并阻止这个任务运行(新的等待旧的完成,因为它将不会在并行运行)。
启动android 3.0,您应该在THREAD_POOL_EXECUTOR
中启动任务if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
} else {
task.execute(params);
}