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

DB 값을 불러왔는데 텍스트뷰에 보여지지 않습니다

0 추천
public void op() {

  StringBuilder sb = new StringBuilder();
  // int code = intent.getIntExtra("code", 0);
  String ch;
  String ch2;

  try {

   URL url = new URL("http://sjbc.tv/test/op.php?num=" + code);

   HttpURLConnection conn = (HttpURLConnection) url.openConnection();

   if (conn != null) {

    conn.setConnectTimeout(10000);

    conn.setUseCaches(false);

    status.setText(String.valueOf(conn.getResponseCode()) + "\n"
      + String.valueOf(HttpURLConnection.HTTP_OK));
    status2.setText(String.valueOf(conn.getResponseCode()) + "\n"
      + String.valueOf(HttpURLConnection.HTTP_OK));

    if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {

     BufferedReader br = new BufferedReader(

     new InputStreamReader(conn.getInputStream()));

     while (true) {

      String line = br.readLine();

      if (line == null)

       break;

      sb.append(line + "\n");

     }

     br.close();

    } else {

     status.setText("http_not");
     status2.setText("http_not");

    }

    conn.disconnect();

   }

  } catch (Exception e) {

   // status.setText(e.toString());
   status.setText(e.toString());
   status2.setText(e.toString());

  }

  String jsonString = sb.toString();

  try {

   int data1 = 0;
   int data2 = 0;

   JSONArray ja = new JSONArray(jsonString);

   /*
    * for (int i = 0; i < ja.length(); i++) {
    * 
    * JSONObject jo = ja.getJSONObject(i); // 결과물
    * 
    * data2 += jo.getInt("cb1_status"); } status2.setText(data2);
    */

   data1 = ja.getJSONObject(0).getInt("cb1_status");
   data2 = ja.getJSONObject(1).getInt("cb1_status");

   // 결과 출력

   if (data1 == 1) {

    ch = "가동중";
    status.setText(ch);
    return;
   } else if (data1 == 0) {
    ch = "정지";
    status.setText(ch);
    return;
   }

   if (data2 == 1) {
    ch2 = "가동중";
    status2.setText(ch2);

   } else if (data2 == 0) {
    ch2 = "정지";
    status2.setText(ch2);

   }
  } catch (JSONException e) {

   // TODO Auto-generated catch block

   status.setText(e.toString());
   status2.setText(e.toString());

  }

 }

 

현재 DB값을 불러와서 status 라는 텍스트뷰에 하나

status2 라는 텍스트뷰에 하나를 가져와야되는데

 

status 의 값을 잘 가지고 와서 값이 1이 들어와 가동중으로 뜨고있습니다

그러나 똑같이 한건데 status2의 값은 200200 으로 뜨고있습니다

뭐가 잘못된거죠??

익명사용자 님이 2015년 6월 5일 질문
UI 쓰레드에서 TextView를 업데이트 하지 않아 Exception 떨어진거 같네요.
아 그 업데이트라는 부분을 어떻게 해주면되나여??
텍스트뷰에 넣을 데이터를 UIThread로 넘긴다음 거기서 setText 하시면 됩니다.

2개의 답변

0 추천
 
채택된 답변
DB값을 가져와서 세팅을 하는데, UI Thread와는 상관없을것 같습니다.
 
if (data == 1) 에서 return을 하시는데 어떻게 아래 부분을 타겠습니까;
op 함수 자체를 빠져나왔을것 같네요
Exception이 발생을 했다면 단순히 200200이라고 되어 있지 않고 Exception 메세지가 쭈욱 set되었겠죠.
 
200200 이란 값은 아마도 처음
status2.setText(String.valueOf(conn.getResponseCode()) + "\n" + String.valueOf(HttpURLConnection.HTTP_OK));
 
이 값이 그대로 들어있는 거겠죠....return을 제거해보세요.
빅클라인 (4,520 포인트) 님이 2015년 6월 5일 답변
아 감사합니다! return 문제였네여 ㅠㅠ  이걸 왜 써줬는지 ㅠㅠ 감사합니다 해결했습니다!
0 추천
일단 값을 찍어보시죠?

line = br.readLine()

했을때 각 line에 정확한 값이 들어 오는지

그리고

sb.append(line) 가 일어날때 sb에도 정확하게 하나씩 값이 추가 되고 있는지

이런부분을 체크해보셔야 될거 같은데요.

그리고 이상한부분이 있는데요 data1 이 0이나 1이면 data2는 검사 하지 않는 건가요?

즉 data1이 0이나 1이 아닌경우에만 data2의 값을 확인하는 건가요?

코드상에는 data1을 검사하실때 0일때도 마지막에 리턴하시고 1일때도 리턴하시던데요.
컴러기 (22,230 포인트) 님이 2015년 6월 5일 답변
...