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

XML 파싱 오픈스트림 오류

0 추천

하나의 액티비티에서 가로로 중앙을 나눠 위쪽은 그리드뷰 아래쪽은 리스트뷰로 레이아웃을 만든 상태에서

그리드뷰에 버튼을 동적으로 생성해서 그 버튼을 누르면 그 버튼에 적혀있는 텍스트를 가져와서

XML 파싱으로 JSP 연결해서 오라클 DB에서 원하는 데이터를 가져와서 현재 액티비티 ListView에 리스트 셋팅을 하는데

안드로이드 4.3 이전 버젼에서는 잘 작동하는데 4.4 이상버젼에선 파싱하다가

오픈스트림에서 멈추면서 어플이 꺼지는 현상입니다

멈추는 줄은 class ParSingThread2 extends Thread의

parser.setInput(url.openStream(), "EUC-KR"); 줄에서 멈춥니다

아래 java파일과 로그를 올립니다

일주일간 해결방법을 찾아봤는데 제가 기초가 부족해서인지 일주일째 이 오류에서 진전이 없어서

고수분들의 도움을 부탁드립니다 ㅠㅠ 소스가 너무길어서 문제가 되는 구문과 연계되는 소스만 올립니다 ㅠ

java

class ParSingThread2 extends Thread { 
  XmlPullParser parser;
  URL url = null;
  Item item;
  
  public void run() {
   try {
    Log.v("Page_2", "8" + usid);
    String mainUrl = "http://"+getString(R.string.url)+":8088/m_db/WebContent/m_Room_PatientList.jsp?room=" + selRoom;
    url = new URL(mainUrl);
    Log.v("Page_2", "9" + usid);
    XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
    Log.v("Page_2", "10" + usid);
    parser = parserCreator.newPullParser();
    Log.v("Page_2", "11" + usid);
    parser.setInput(url.openStream(), "EUC-KR");
    Log.v("Page_2", "12" + usid);
    String parserName = null;
    int parserEvent = parser.getEventType();
    while (parserEvent != XmlPullParser.END_DOCUMENT) {
     switch (parserEvent) {
     case XmlPullParser.START_DOCUMENT:
      break;
     case XmlPullParser.END_DOCUMENT:
      break;
     case XmlPullParser.START_TAG: // START_TAG 부분일 경우
      parserName = parser.getName();
      if (parserName.equals("data")) {
       listItems = new ArrayList<Item>();
      } else if (parserName.equals("pa_list")) {
       item = new Item();
      }
      break;
     case XmlPullParser.END_TAG:
      parserName = parser.getName();
      if (parserName.equals("data")) {
      } else if (parserName.equals("pa_list")) {
       listItems.add(item);
  
       item = null;
      }
      parserName = null;
      break;
     case XmlPullParser.TEXT:
  
      if (parserName != null) {
       if (parserName.equals("ROOM")) {
        item.setRoom(parser.getText().trim());
       } else if (parserName.equals("PAID")) {
        item.setPaid(parser.getText().trim());
       } else if (parserName.equals("NWNO")) {
        item.setNwno(parser.getText().trim());
       } else if (parserName.equals("PANM")) {
        item.setPanm(parser.getText().trim());
       } else if (parserName.equals("AGES")) {
        item.setAges(parser.getText().trim());
       } else if (parserName.equals("SEXS")) {
        item.setSexs(parser.getText().trim());
       } else if (parserName.equals("INSP")) {
        item.setInsp(parser.getText().trim());
       } else if (parserName.equals("IWDT")) {
        item.setIwdt(parser.getText().trim());
       } else if (parserName.equals("DPCD")) {
        item.setDpcd(parser.getText().trim());
       } else if (parserName.equals("DOCD")) {
        item.setDocd(parser.getText().trim());
       } else if (parserName.equals("SBNM")) {
        item.setSknm01(parser.getText().trim());
       }
      }
      break;
     }
     parserEvent = parser.next();
  
    }
   } catch (Exception e) {
    e.printStackTrace();
   } 
mHandler.sendEmptyMessage(PARSING_FINISH2);
  }
 }

 

logcat

12-09 10:19:35.675: W/System.err(9157): java.net.ProtocolException: Unexpected status line:

12-09 10:19:35.685: W/System.err(9157): at com.android.okhttp.internal.http.RawHeaders.setStatusLine(RawHeaders.java:108)

12-09 10:19:35.685: W/System.err(9157): at com.android.okhttp.internal.http.RawHeaders.fromBytes(RawHeaders.java:308)

12-09 10:19:35.685: W/System.err(9157): at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:135)

12-09 10:19:35.685: W/System.err(9157): at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:644)

12-09 10:19:35.690: W/System.err(9157): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:347)

12-09 10:19:35.690: W/System.err(9157): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)

12-09 10:19:35.690: W/System.err(9157): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:179)

12-09 10:19:35.690: W/System.err(9157): at java.net.URL.openStream(URL.java:470)

12-09 10:19:35.690: W/System.err(9157): at com.gsen.mchart.Ward_Main_Activity$ParSingThread2.run(Ward_Main_Activity.java:374)

12-09 10:19:35.690: V/items2(9157): 겟카운트

12-09 10:19:35.695: D/AndroidRuntime(9157): Shutting down VM

12-09 10:19:35.695: W/dalvikvm(9157): threadid=1: thread exiting with uncaught exception (group=0x423d3c08)

12-09 10:19:35.700: E/AndroidRuntime(9157): FATAL EXCEPTION: main

12-09 10:19:35.700: E/AndroidRuntime(9157): Process: com.gsen.mchart, PID: 9157

12-09 10:19:35.700: E/AndroidRuntime(9157): java.lang.NullPointerException

12-09 10:19:35.700: E/AndroidRuntime(9157): at com.gsen.mchart.Ward_Main_Activity$PatientListAdapter.getCount(Ward_Main_Activity.java:542)

12-09 10:19:35.700: E/AndroidRuntime(9157): at android.widget.ListView.setAdapter(ListView.java:492)

12-09 10:19:35.700: E/AndroidRuntime(9157): at com.gsen.mchart.Ward_Main_Activity$6.handleMessage(Ward_Main_Activity.java:182)

miseis (120 포인트) 님이 2014년 12월 9일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...