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

handler 이용해서 주기적으로 데이터 갱신

0 추천
public class BusDetail extends Activity{
 TextView busDetail;
 static MyItemId idList;
 ArrayList<MyItemId> items;
 ArrayList<String> stNmItem;
    ProgressDialog mProgress;
    boolean mRaw;
    TextView busName;
    ArrayAdapter<String> adapter2;
    ListView list;
    boolean keep=false;
    
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.busdetail);
  
  busDetail=(TextView)findViewById(R.id.detail);
  busName = (TextView)findViewById(R.id.busName);
  list=(ListView)findViewById(R.id.busList);
  items=new ArrayList<MyItemId>();
  
  items.add(idList);
  busDetail.setText(items.get(0).info);
  busName.setText(items.get(0).name);
  
   
      list.setAdapter(adapter2);
  
      stNmItem = new ArrayList<String>();
      adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,stNmItem);
      
         ListView myList;
         myList=(ListView)findViewById(R.id.busList);
         myList.setAdapter(adapter2);
      
   mProgress = ProgressDialog.show(this, "Wait", "Downloading...");
   String serviceUrl="http://ws.bus.go.kr/api/rest/arrive/getArrInfoByRouteAll";
   String serviceKey = "sbMXmgrMwrFsIh1NyW3VUwk4sVtG%2BZ9ybaBcqc6KLUm%2FTTe6pJyzASZIhans0HtyVJypCQp%2FzaWqASbmN7t1nw%3D%3D";

   String busRouteId=items.get(0).id;
   String strURL = serviceUrl+"?ServiceKey="+serviceKey+"&busRouteId="+busRouteId;
         
         DownThread thread = new DownThread(strURL);
         thread.start(); 
 }

 public static void getBusIdList(MyItemId list) {

  idList=list;
 }
 
 public void onDestroy(){
  super.onDestroy();
  keep = false;
 }
 
    }

 

뇽뇽이 (440 포인트) 님이 2014년 11월 28일 질문
코드는 위와 같은데 downthread랑 핸들러는 댓글에 남깁니다..핸들러를 10초 주기로 계속 시행되게 하고 싶은데요.. 아 지금 코드와는 별개로 만약에액티비티를 꺼도 10분 주기로 계속 핸들러를 불러내서 데이터를 갱신하려고 하면 어떻게 하면 좋을까요??ㅠㅜ
//쓰레드 클래스 (내부클래스)
    class DownThread extends Thread{
        String mAddr;
        public DownThread(String addr) {
            mAddr = addr;
        }
        
        @Override
        public void run() {
           String result = DownloadHtml(mAddr);
           Message message = mAfterDown.obtainMessage();
           message.obj = result;
            
           mAfterDown.sendMessage(message);
           
        }
        
        String DownloadHtml(String addr){
            StringBuilder html = new StringBuilder();
            try{
                URL url = new URL(addr);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                if(conn!=null){
                    conn.setConnectTimeout(10000);;
                    conn.setUseCaches(false);
                    
                    if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){
                        BufferedReader br = new BufferedReader(
                                new InputStreamReader(conn.getInputStream()));
                                
                                while(true){
                                    String line = br.readLine();
                                    if(line==null) break;
                                    html.append(line +'\n');                                    
                                }
                                br.close();
                        
                    }
                    conn.disconnect();
                }
            }catch(NetworkOnMainThreadException e){
                //return "Error : 메인 스레드 네트워크 작업 에러 -"+e.getMessage();
            }catch(Exception e){
                return "Error : "+e.getMessage();
            }
            return html.toString();            
        }    
        
    }//End Inner Class [DownThread]
Handler mAfterDown = new Handler(){
        public void handleMessage(Message msg){
         keep=true;
            mProgress.dismiss();
            String html = (String)msg.obj;
            Toast.makeText(BusDetail.this, html, 0).show();
            if(mRaw){
             Toast.makeText(BusDetail.this, "if(mRaw)", 0).show();
            }else{
                try{
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    InputStream istream = new ByteArrayInputStream(html.getBytes("utf-8"));
                    Document doc = builder.parse(istream);
                    
                    
                    Element root = doc.getDocumentElement();
                    
                    NodeList itemList = root.getElementsByTagName("itemList");
                    
                    System.out.println("item개수:"+itemList.getLength());
                    for(int i=0;i<itemList.getLength();i++){
                        
                        Element fstElmnt = (Element)itemList.item(i);
                        
                        NodeList routeList = fstElmnt.getElementsByTagName("stNm");
                        String stNm = routeList.item(0).getChildNodes().item(0).getNodeValue();
                        System.out.println("Id:"+stNm);
                        stNmItem.add(stNm);
                        
                    }
                    adapter2.notifyDataSetChanged();
                }
                catch (Exception e) { ; }
            }    
            while(keep != true){
              mAfterDown.sendMessageDelayed(msg, 10000);
            }
        }
    };

답변 달기

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