2011-09-13 9 views
0

このコードはUIスレッドで使用したときに機能しましたが、AsyncTaskクラスに移動する必要がありました。私はちょうどこれを行う方法を読んで終わったが、私はそれがクラスを読み始めたときに今クラッシュしているアプリを実行するとき。AsyncTaskクラスはXMLを解析します

クラスは、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); 
       } 
      } 

編集:私はonPostExecuteに「for」ループに移動していると、それはコードを向上させるように見えるが、私はまだエラー「まだロックされた未登録のハンドル」を受け付けております。何か案は?

アイデアロブをありがとうしかし、運は、背景からループやトーストを削除した...新しいコードを上記の。

+0

、アイデアロブが、運用 – Rob

+0

おかげで、このような背景...新しいコードからのループとトーストを削除したことを削除してください。 "キャッチされていないハンドラ:キャッチされていない例外のためにスレッドAsycTask#1が終了しました"というエラーを受け取っています – pommi

+0

完全なスタックトレースを提供してください。これは重要。また、例外が発生した場合には、行を丸めてください。最後に、 'rowPlatform'はどこから来ますか? – WarrenFaith

答えて

1

があなたのLogCatを使用してください:エラー「キャッチされない例外によりに出AsycTask#1スレッド捕捉されないハンドラ」を受け付けております。 AndroidRuntimeログは完全なスタックトレースと強く型付けされた例外を提供します。これにより、クラッシュした理由を正確に表示します。

私はそれはあなたがバックグラウンドスレッドからProgressDialogを表示しようとしているという事実だと確信しています。あなたはAsyncTaskを実行する直前にUIスレッドでそれを行う必要があります。その前に開始された実行UIスレッド上で呼び出されたonPreExecute()、に行く戻ってUIスレッド

+0

ありがとうリッチ - それを見ているすべての後に、それは何かとても愚かだった! – pommi

+0

これは通常そうですが、通常はそれを大声で出したり、目を新しくしたりします。喜んで助けてください。 – Rich

0

この

pd = ProgressDialog.show(CategoryData.this, "Please Wait...", "Loading games"); 

で実行されるためあなたは、onPostExecuteでそれを消すことができます。あなたはdoInBackground内のトーストを使用している