2012-05-06 34 views
1

我有點新的Android開發,但我想做一個XML解析器。我一直在使用android.sax庫,遵循一些tutos,這很好。 的一件事就是讓我懷疑的是,我實際上並不在一個單獨的線程執行分析器,我只是用我的處理程序解析器和我的主要活動之間的通信。 我應該解析一個線程嗎?我應該啓動一個線程來解析一些xml嗎?

這裏是我的主要活動代碼:

 tv = (TextView)findViewById(R.id.tv); 

    try { 
     URL url = new URL("https://www.googleapis.com/shopping/search/v1/public/products?key=AAAAABBBBBCCCCDDDEEEEFFF&country=FR&restrictBy=gtin=5030999075254&alt=atom"); 
     XMLHandler xHandler = new XMLHandler(); 
     Feed feed = xHandler.parse(url.openStream()); 

      if(feed.getTotalResults()==0 || feed.getItems() == null || feed.getItems().isEmpty()) { 
       Log.w("XMLPARSENull", "No items 
      } 
      else { 
       tv.setText(feed.getTotalResults()+" " + feed.getItemsPerPage() + " " + feed.getStartIndex() + " " + feed.getTitle()); 
       Iterator<Product> it = feed.getItems().iterator(); 
       while(it.hasNext()) { 
        Log.w("XMLPARSEFeed",it.next().getName()); 

       } 
      } 


    } catch(Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.e("XMLPARSEException", "ERROR",e); 
    } 
+0

如果你開始了它可能是明智的,看看[StrictMode(http://android-developers.blogspot.se/2010/12/new-gingerbread-api-strictmode。 html) - 當你在一個不屬於它的線程上做一些愚蠢的事情時,它會很快告訴你。 – Jens

回答

0

是的,這是你必須將你解析成後臺線程,特別是如果你的XML被通過網絡流;否則你的應用程序很可能被系統阻止主線程而中斷。

您不必使用原始Thread,雖然; Android提供了諸如ASyncTask之類的內容,使其更容易一些。

1

一個簡單的答wer: 如果在主(UI)線程中有連接,則在線程用於下載信息並對其進行解析時,用戶界面將被凍結。連接需要一段時間,因此可能會凍結。

除此之外,android 4.0現在實際上並不允許你從這個線程調用HTTP請求,它會拋出一個錯誤,這將在崩潰之前在logcat中看到。

這裏最好使用一個異步任務,這裏有一些更多的信息。 Information on Async Tasks

相關問題