마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android.os.NetworkOnMainThreadException

0 추천
public void xmlParsing(String uri) {
  String category = "", title = "", link = "", description = "";
  try {
   // XML 데이터를 읽어옴
   URL url = new URL("주소");
   InputStream in = url.openStream();

   XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
   XmlPullParser parser = factory.newPullParser();

   // XmlPullParser에 XML 데이터와 인코딩 방식을 입력
   parser.setInput(in, "euc-kr");

   int eventType = parser.getEventType();
   boolean isItemTag = false;

   while (eventType != XmlPullParser.END_DOCUMENT) {

    /*
     * <tag> : START_TAG content : TEXT </tag> : END_TAG
     */
    if (eventType == XmlPullParser.START_TAG) {

     tagName = parser.getName();
     if (tagName.equals("item"))
      isItemTag = true;

    } else if (eventType == XmlPullParser.TEXT && isItemTag) {

     if (tagName.equals("category"))
      category = parser.getText();

     if (tagName.equals("title"))
      title = parser.getText();

     if (tagName.equals("link"))
      link = parser.getText();

     if (tagName.equals("description"))
      description = parser.getText();

    } else if (eventType == XmlPullParser.END_TAG) {

     tagName = parser.getName();

     if (tagName.equals("item")) {
      // 파싱한 데이터 사용 or 저장

      title = "";
      category = "";
      link = "";
      description = "";
      isItemTag = false;

     }
    }

    eventType = parser.next();
   }
  } catch (Exception e) {
   Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
  }
 }

제목과 같은 오류가 발생할 시에는 작업쓰레드를 따로 만들어야 하는 건가요??

xml을 파싱하는 오픈소스를 가져온건데, 어떤 부분을 따로 돌려야 하는 건가요?ㅠㅠ

아직 초보라 잘 모르겠네요...

위와 같은 오류가 네트워크작업을 메인쓰레드에서 해서 난 오류인지와

어떤 부분들을 작업쓰레드로 돌려야 하는지

알려주시면 감사하겠습니다!

 

 

nandroid (1,620 포인트) 님이 2014년 9월 15일 질문

1개의 답변

+1 추천
 
채택된 답변
아이스크림 이후로는 메인쓰레드에서 네트워크 작업을 하지 않도록 강제하고 있습니다.

쓰레드를 직접만드셔도 되고, AsyncTask를 활용해도 되고, 다른 라이브러리를 활용하셔도 됩니다.

5,6 라인만 쓰레드로 돌리셔도 무방할거같은데요.

어차피 파싱하는 작업도 하나의 큰 작업으로 묶는다면 전체를 하시는것도 괜찮을듯 싶습니다.
아픔제로 (3,460 포인트) 님이 2014년 9월 15일 답변
nandroid님이 2015년 8월 11일 채택됨
...