当我在UI线程中使用它但希望将其移动到AsyncTask类时,此代码有效。我刚刚读完了如何做到这一点,但是当我运行应用程序时,它现在在开始阅读课程时崩溃。
该类在将XML文件加载到List之前调用并解析它们。这是我的第一个Android应用程序,因此您可以提供任何帮助。
由于
public class DownloadXml extends AsyncTask<String, Void, String>
{
private ProgressDialog pd;
protected String doInBackground(String... platform)
{
pd = ProgressDialog.show(CategoryData.this, "Please Wait...", "Loading games");
try
{
BaseFeedParser parser = new BaseFeedParser();
messages = parser.parse();
}
catch (Throwable t)
{
Log.e("RetailApp",t.getMessage(),t);
}
return rowPlatform;
}
protected void onPostExecute(String rowPlatform)
{
productList = new ArrayList<HashMap<String, Object>>();
for (Message msg : messages)
{
if(msg.getPlatform().compareTo(rowPlatform) == 0 )
{
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("Title", msg.getTitle());
map.put("Brand", msg.getBrand());
map.put("Price", "$" + msg.getPrice());
try
{
String picture[] = msg.getImage().split("-large.jpg");
URL pictureURL = new URL(picture[0] + "-medium.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(pictureURL.openStream());
map.put("Img",bitmap);
}
catch (Throwable t)
{
Log.e("RetailApp",t.getMessage(),t);
}
productList.add(map);
}
}
编辑:我已将'for'循环移动到onPostExecute,这似乎改进了代码,但我仍然收到'未注册的句柄仍然被锁定'错误。有什么想法吗?
感谢Rob的想法,但没有运气,已经从背景中移除了循环和Toast ......上面的新代码。我收到错误“Uncaught handler:thread AsycTask#1因未捕获的异常而退出”
答案 0 :(得分:1)
使用您的LogCat。 AndroidRuntime日志将为您提供完整的堆栈跟踪和强类型异常,它将向您显示崩溃的确切原因。
我很确定你正在尝试从后台线程中显示ProgressDialog。您应该在执行AsyncTask之前在UI线程上执行此操作。您可以在onPostExecute中将其关闭,因为它会在UI线程上运行
答案 1 :(得分:0)
此
pd = ProgressDialog.show(CategoryData.this, "Please Wait...", "Loading games");
进入onPreExecute(),在执行开始之前在UI线程上调用。