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

xmlpullparser 오류ㅠㅠㅠ

0 추천
public class MainActivity extends AppCompatActivity {

    TextView result;
    Button parser;
    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("");

                parser();

            }
        });
    }

    void parser() {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String code = "", codeNm = "";
                    // XML 데이터를 읽어옴
                    URL url = new URL(http://api.nongsaro.go.kr/service/garden/ignSeasonList?apiKey=서스키;

                    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) {
                        Log.d("hj", "와일시작!~!~!");
                        /*
                        * <tag> : START_TAG
                        * content : TEXT
                        * </tag> : END_TAG
                        */
                        if (EventType == XmlPullParser.START_TAG) {
                            tag = parser.getName();
                            Log.d("hj", tag);
                            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();
                    e.printStackTrace();
                }
            }
            });thread.start();


        }
}
5-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: item
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: 와일시작!~!~!
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: code
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: 와일시작!~!~!
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: 와일시작!~!~!
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: 와일시작!~!~!
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: codeNm
05-11 10:14:21.128 3323-7663/com.example.hywoman.aa D/hj: 와일시작!~!~!
이런식으로 LOg.d는 나오는데 안드로이드 결과창에는 아무것도 나오지 않아여ㅠㅠ
초보개발쟈 님이 2017년 5월 11일 질문

1개의 답변

0 추천
로그창이 아니라 결과창인가요?

텍스트 뷰에 아무 데이터가 안나온다는 의미신 듯 한데.

result.setText("출력할 데이터"); 같은 걸 호출하는 코드가 안보이는데요...
익명사용자 님이 2017년 5월 12일 답변
결과 값은 나오는데 하나의 결과 값이 나오는게 아니라 while문이 다 돌고 나서 마지막 결과값만 나오는데 이건 어떻게 해결해야 하나요?ㅠㅠ
결과값을 while문 돌리면서 추가하다가 마지막에 result.setText 로 출력하시면 됩니다.  
예를 들어 아래와 같이하면 0~10까지 숫자가 찍힐 겁니다.
(String으로 추가하면 추가시마다 성능 이슈가 있어 StringBuffer로 예제 만들었습니다.)

 
  int i = 0;
 StringBuffer sb = new StringBuffer();
  while(true) {    
   sb.append(i);
   sb.append(", ");
   if(i > 10) {
    break;
   }
   i++;
}
result.setText(sb.toString());
public class MainActivity extends AppCompatActivity {
    String adviseInfo = "", distbNm = "", fncltyInfo="";
    TextView result;
    Button parse;



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

        
        result = (TextView) findViewById(R.id.result);
        findViewById(R.id.parse).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                parser();
                result.append(adviseInfo);
                result.append(distbNm);
                result.append(fncltyInfo);

            }
        });
    }

    void parser() {

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {

                    // XML 데이터를 읽어옴
                    URL url = new URL("http://api.nongsaro.go.kr/service/garden/gardenDtl?apiKey=서비스키";

                    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) {
                        Log.d("hj", "와일시작!~!~!");
                        /*
                        * <tag> : START_TAG
                        * content : TEXT
                        * </tag> : END_TAG
                        */
                        if (EventType == XmlPullParser.START_TAG) {
                            tag = parser.getName();
                            if (tag.equals("item")){ isItemTag = true;
                            Log.d("hj", tag);}

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

                            if (tag.equals("adviseInfo")){
                                adviseInfo = parser.getText();

                            }

                            if (tag.equals("distbNm")){
                                distbNm = parser.getText();
                            }
                            if (tag.equals("fncltyInfo")){
                                fncltyInfo = parser.getText();
                            }

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

                            if (tag.equals("item")) {


이런식으로 했는데 items로  item이 여러개 있는데 이걸 한번에 다 출력하고 싶은데.....ㅠㅠㅠㅠ 잘모르겠어서요ㅠ
String text = "adviseInfo : " + adviseInfo + ", distbNm : " + distbNm + ", fncltyInfo : "  + fncltyInfo;
result.setText(text);
...