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

thread 안에 ui update 하고 싶은데요.

0 추천

while 문을 돌리고 그 안에서 sleep을 3분정도 합니다. 

sleep 이 끝나고 나면 ip 를 바꿔주고 ui 에 보여지는 ip 를 변경된 ip로 변경 해주고 싶습니다. 

현재 ip 가 잠깐 보여지고 바로 사라져 버리는데 문제를 모르겠습니다. 

코드 일부분 입니다.

 
public void run() {
 
 
super.run();
try {
while (isPlay) {
update("Starting");
Thread.sleep(n);
===============
private void update(String messsage){
ip = getLocalIpAddress();
tv.post(new Runnable() {
 
@Override
public void run() {
tv.setText(ip);
}
});
}
===============
public String getLocalIpAddress() {   
try {
for (Enumeration en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf =  (NetworkInterface) en.nextElement();
for (Enumeration enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}

ip가  textview 에 잠깐 보여진뒤 사라집니다. 

숀화이트 (3,310 포인트) 님이 2014년 7월 10일 질문

1개의 답변

0 추천
아래와 같은 형태로 다시 시도해보세요
 
        new AsyncTask<Context, Void, String>() {
            protected void onPreExecute() {
                // show progress dialog
            }
            @Override
            protected String doInBackground(Context... contexts) {
                Context context = contexts[0];
                String ip;
                ip = yourGetIpMethod();
 
                return ip;
            }
 
            @Override
            protected void onPostExecute(String result) {
                // close progress dialog
                textview.setText(result);
            }
        }.execute(getApplicationContext());

 

 

aucd29 (218,390 포인트) 님이 2014년 7월 10일 답변
...