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

Thread로 Client 실행 후 실시간으로 JSON데이터 가져오기

0 추천
new Thread(new Client1()).start(); // 쓰래드로 클라이언트실행

       while(true){
         
        try {
         
           
         // System.out.println("시작합니다JSON부분");
            // JSON 구문을 파싱해서 JSONArray 객체를 생성
         
            JSONArray jAr = new JSONArray(mStrJson1);
            
            Log.d("UDP", "Json=>"+udpgetdata);  
            for(int i=0; i < jAr.length(); i++) {

                // 개별 객체를 하나씩 추출

                JSONObject student = jAr.getJSONObject(i);
               
                // 객체에서 데이터를 추출

                strData +="Latitude : "+student.getString("Latitude") + " \n"
              +"Longitude : "+ student.getString("Longitude");
                
                
                strData1 +="Latitude : "+student.getString("Latitude");
                strData2 +="Longitude : "+ student.getString("Longitude");
                
                getlat1 +=student.getDouble("Latitude");    //12633.8961
                getlon1 +=student.getDouble("Longitude");   //Double//3327.4121
              
                System.out.println("doublelatitude : "+getlat1);
                System.out.println("doublelongitude : "+getlon1);
                
             double Doublebunlat = getlat1 *0.01; //126.338961
                int Intbunlat = (int)Doublebunlat; ////126
                double Double1lat = getlat1-Intbunlat*100; //12600-12633.8961=33.8961
                 Double2lat = Intbunlat +(Double1lat/60); // 126+33.8961/60 =126.564935
                
                double Doublebunlon = getlon1 *0.01; //33.274121
                int Intbunlon = (int)Doublebunlon; ////33
                double Double1lon = getlon1- Intbunlon*100; //3327.4121-3300=27.4121
                Double2lon = Intbunlon +(Double1lon/60); // 33+27.4121/60 =33.456833

    
                sendBroadcast(new Intent("android.intent.action.Caution"));
                
                
            
            }

        } catch (JSONException e) {

            Log.d("tag", "Parse Error");

        }
JSONParsingResult.setText(strData);
        
        Textgetlat1.setText(Double.toString(Double2lat));
        Textgetlon1.setText(Double.toString(Double2lon));
    
        new Thread(new gpsGetdistance()).start();
       gpslocation = new LatLng(getlat2, getlon2);
        initMap();
    }

안녕하세요

 

쓰래드로 클라이언트를 돌리면 서버에서 가져온 JSON값이 버퍼에 저장이 되는건 확인하였습니다.

 

그런데 제가 텍스트뷰에 실시간으로 JSON값을 표시하고싶어서 JSON 부근에 while문을 썼는데

 

에러는 안뜨고 메모리 과부하 때문인 지 어플리케이션이 랙이 걸리는 현상이 발생하였습니다.

 

그래서 혹시 다른방법으로 실시간으로 JSON 데이터를 가지고 오는 방법 좀 설명 해 주실분 좀 알려주시면 감사하겠습니다.

 

 

앱등! (400 포인트) 님이 2015년 5월 18일 질문

2개의 답변

0 추천
쓰레드에서는 UI 컨트롤에 바로 접근해서 조작을 못합니다.

runOnuiThread를 사용하거나 핸들러를 사용해야합니다.
어렵군요 (5,920 포인트) 님이 2015년 5월 19일 답변
0 추천
while문은 조건이 참(true)인 동안 계속 루프를 도는 문장입니다.

당연히 무한루프를 돌다가 뻗겠지요

또한 ui를 변경하기 위해선 runOnUiThread나 핸들러를 이용하세요
컵받침 (5,500 포인트) 님이 2015년 5월 19일 답변
...