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

쓰레드간 변수 사용 질문드려요ㅠㅠ

0 추천

안녕하세요, 청주에서 웹, 앱을 공부하고 있는 돌취생입니다

현재 안드로이드, php, mysql 을 이용하여 회원가입을 구현하고있는데요..

JoinActivity.java 안에 밑에처럼 회원가입(joinbutton) 버튼을 클릭하면 쓰레드 생성후 http post 방식으로 데이터 전송하고

결과값을 php 페이지에 출력하여 String형으로 받아와 toast로 띄우고 있습니다. 하지만 통신에는 문제가 없으나 결과값을

받아올때 바로바로 변수값 업데이트가 안되고 앱 실행 후 최초 1회 버튼 클릭에는 toast에 testResult가 빈값으로 나온후 2

회 클릭부터 제가 원하는 값 1이 출력 됩니다.. 그러니까 결과값을 받아오긴 받아오되 toast띄우는 시점 사이에서 뭔가 늦어

지는 것 같습니다.. 구글링을 통해 검색을 해서 handler, looper 등을 알았는데 확신이 서지 않아서 질문드립니다....

바쁘신와중에 죄송합니다!! 답변 부탁드리겠습니다...

 

public class JoinActivity extends Activity {

    private Button joinButton;

    private String testResult;

    @Override

    public void onCreate(Bundle savedInstanceState) {
 
        ......내용생략
 
        joinButton = (Button) findViewById(R.id.joinButton);
        joinButton.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
 
                Toast toast;
 
                ......내용 생략
 
                Thread httpPostThread = new Thread(new Runnable() {
 
                    @Override
                     public void run() {
 
                         ......내용 생략
 
                         testResult = httpPostData.sendData(); // httpPostData는 class로 빼놓았고, String으로 return 됩니다.(결과)
 
                     }
 
                 }
 
                 httpPostThread.start();
 
                 toast = Toast.makeText(joinActivity, testResult, Toast.LENGTH_LONG);
                 toast.show(); // 여기에서 testResult 값이 잘 넘어왔나 확인합니다.
 
             }
         }
     }
}
cjinweb (120 포인트) 님이 2014년 12월 14일 질문

1개의 답변

0 추천

쓰레드에 대한 이해가 부족한 거 같습니다.

 

httpPostThread.start();

다음에 결과를 확인하기 위해서 토스트를 띄우는데요..

 

쓰레드 시작 명령 후 쓰레드 내의 동작 완료 여부에 관계없이 토스트 띄우는 코드가 동작됩니다.

그래서 위 코드로는 원하는 결과가 나올 때도 있고, 안나올 때도 있습니다.

 

결과 확인하기 위한 토스트를 public void run()의 마지막 부분.. 즉 testResult를 수신한 다음에 띄우도록 처리하면 됩니다. 이때 토스트 띄우는 코드는 메인 쓰레드에서 동작되게(runOnUiThread, 핸들러 등 이용) 처리해줘야 됩니다.

isul (7,920 포인트) 님이 2014년 12월 14일 답변
...