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

xmlpullparser오류 ㅜㅜ

0 추천
public class MainActivity extends AppCompatActivity {

    TextView result;
    Button parse;
    ScrollView mScrollView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mScrollView = (ScrollView)findViewById(R.id.mScrollView);
        result = (TextView) findViewById(R.id.result);
        findViewById(R.id.parse).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                result.setText("");
                String code = "", codeNm = "";

                try {
                    // XML 데이터를 읽어옴
                    URL url = new URL("http://api.nongsaro.go.kr/service/garden/ignSeasonList?apiKey=20170406IDQJOZCGGNG7XWTNEG7FW");
                    InputStream in = url.openStream();

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

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

                    String tag = "";
                    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) {
                            tag = parser.getName();
                            if (tag.equals("item")) isItemTag = true;

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

                            if (tag.equals("code"))
                                code = parser.getText();

                            if (tag.equals("codeNm"))
                                codeNm = parser.getText();

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

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


                                isItemTag = false;

                            }
                        }
                        EventType = parser.next();
                    }

                } catch (Exception e) {
                    Toast.makeText(getApplicationContext()," 실패",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}\
이렇게 파싱하는 중인데요.. 안의 내용은 안나오고 계속 실패가 뜨는데 이유를 정말 모르겠습니다.ㅜㅜ
초보개발자 님이 2017년 5월 11일 질문

2개의 답변

0 추천
토스트부분에 e.printStackTrace();삽입하셔서

로그캣에 나오는 내용을 보여주세요
Charlesz (4,420 포인트) 님이 2017년 5월 11일 답변
"실패" 자리에 e.printStackTrace(); 삽입하면 오류나요.ㅠㅠ
토스트 밑라인에 삽입해야되요 ㅎㅎ;;
밑에분 말씀처럼 메인쓰레드에서 네트워크 작업해서 에러나는거라면 쓰레드를 추가로 하나 생성하셔서 작업해주셔야합니다
쓰레드이용해서 했는데 Log.d 했을 때는 밑에 되는데 ..
결과창에 아무것도 안나오고 실패도 안나와요ㅠㅠ
0 추천
통신을 별도 Thread에서 수행하지 않아 Exception이 발생한 듯 합니다.

별도 Thread에서 기동되게 변경하세요..
익명사용자 님이 2017년 5월 11일 답변
2017년 5월 11일 수정
...