這段代碼在UI線程中使用時有用,但想將其移入AsyncTask類。我剛剛讀完如何做到這一點,但是當我運行該應用程序時,它正在開始閱讀課程時崩潰。AsyncTask類解析XML
該類在將其加載到List之前調用並解析XML文件。這是我的第一個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這似乎提高了代碼,但我仍然收到「未註冊的句柄仍鎖定」的錯誤。有任何想法嗎?
感謝您的想法羅布,但沒有運氣,已經從背景中刪除循環和吐司...上面的新代碼。我收到錯誤「未捕獲的處理程序:線程AsycTask#1由於未捕獲的異常退出」
您在doInBackground中使用Toast,嘗試刪除 – Rob
感謝Rob的想法,但沒有運氣,已從後臺刪除循環和Toast ...上面的新代碼。我收到錯誤「未捕獲的處理程序:線程AsycTask#1由於未捕獲的異常而退出」 – pommi
請提供完整的堆棧跟蹤。這個很重要。請同時處理髮生異常的行。最後:'rowPlatform'從哪裏來? – WarrenFaith