2012-08-16 2 views
0

허니 콤 오류 android.os.NetworkOnMainThreadException 대상 대상 SDK를 11로 설정 한 후 아래 코드를 사용하여 무시했습니다. 그것은 내 애플 리케이션에 영향을 미칠 것입니까? 누군가이 문제를 극복하기 위해 어떤 것을 제안 할 수 있습니까?Android HoneyComb 오류 (작업 표시 줄 사용)

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 



@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.grid_layout); 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 

     ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

     XMLParser parser = new XMLParser(); 
     String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
     Document doc = parser.getDomElement(xml); // getting DOM element 

     NodeList nl = doc.getElementsByTagName(KEY_SONG); 
     // looping through all song nodes <song> 
     for (int i = 0; i < nl.getLength(); i++) { 
      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 
      Element e = (Element) nl.item(i); 
      // adding each child node to HashMap key => value 
      map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
      map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
      map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST)); 
      map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); 
      map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 

      // adding HashList to ArrayList 
      songsList.add(map); 
     } 

답변

2

그것은 메인 스레드 (UI 스레드)에 대한 네트워크 액세스를 할 대상 SDK는 벌집 이상 잎파리가 좋은 연습이 아닌,이를 방지하기 위해 Asynac tasks를 사용하여 메인 스레드 exception.Try에 네트워크를 제공 할 것입니다.

코드 EX는 :

public class yourclass extends Activity{ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.uoyrlayout); 
     //this is UI thread you should not do network access from here. 
     new LongRunning().execute();//call to background thread to do network access 
} 
    public class LongRunning extends AsyncTask<Void, Void, Void> { 
     protected void onPreExecute() { 
      //UI updating goes here before background thread.. 
     } 
     @Override 
     protected Void doInBackground(Void... params) {  
      //This is not the UI thread 
      //do your network acces 
      return null;    
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      //update your UI after background thread 
     } 

    } 
} 
+0

당신은 그것을 구현하는 방법에 대한 샘플을 보여줄 수 있습니까? –

+0

확인 코드를 편집했습니다 –

+0

고마워요. 이것은 어렵게 보인다. 그 upvote로, 나는 너의 대답을 받아 들일 것이다. 감히 내게 코드를 구현하려면 도움을 요청해야합니다. –