⭐주요 메서드⭐

  • postAtTime
  • postDelayed : 약간의 시간이 지난 후 코드가 실행됨. (ex. handler.postDelayed(new Runnable(){...}, 1000);
  • sendMessageAtTime : 메시지를 보낼 때의 시간 지정 가능
  • sendMessageDelayed : 메시지를 일정 시간이 지난 후 보내짐

 

0️⃣예제 실행화면

 

1️⃣activity_main.xml

so simple

 

2️⃣MainActivity.java

메서드를 2개 만든다. (request, makeRequestDialog)

package com.example.chapter9_2;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                request();
            }
        });
    }

    private void request() {
        String title = "원격 요청";
        String message = "데이터를 요청하시겠습니까?";
        String titleButtonYes = "예";
        String titleButtonNo = "아니오";

        AlertDialog dialog = makeRequestDialog(title, message, titleButtonYes, titleButtonNo);
        dialog.show();

        textView.setText("대화상자 표시중...");
    }

    private AlertDialog makeRequestDialog(String title, String message, String titleButtonYes, String titleButtonNo) {
        AlertDialog.Builder requestDialog = new AlertDialog.Builder(this);

        requestDialog.setTitle(title);
        requestDialog.setMessage(message);

        // 예 버튼
        requestDialog.setPositiveButton(titleButtonYes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                textView.setText("5초 후에 결과 표시됨.");

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText("요청 완료됨.");
                    }
                }, 5000);
            }
        });

        // 아니오 버튼
        requestDialog.setNegativeButton(titleButtonNo, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
            }
        });
        
        return requestDialog.create();
    }
}

 

🔹request()🔹

    private void request() {
        String title = "원격 요청";
        String message = "데이터를 요청하시겠습니까?";
        String titleButtonYes = "예";
        String titleButtonNo = "아니오";

        AlertDialog dialog = makeRequestDialog(title, message, titleButtonYes, titleButtonNo);
        dialog.show();

        textView.setText("대화상자 표시중...");
    }

makeRequestDialog 메서드를 이용하여 AlertDialog 객체를 만든 뒤 show로 나타낸다.

 

🔹makeRequestDialog

    private AlertDialog makeRequestDialog(String title, String message, String titleButtonYes, String titleButtonNo) {
        AlertDialog.Builder requestDialog = new AlertDialog.Builder(this);

        requestDialog.setTitle(title);
        requestDialog.setMessage(message);

AlertDialog.Builder 객체를 생성하여 AlertDialog의 다양한 디자인을 구축할 수 있다.

        // 예 버튼
        requestDialog.setPositiveButton(titleButtonYes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                textView.setText("5초 후에 결과 표시됨.");

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText("요청 완료됨.");
                    }
                }, 5000);
            }
        });

postDelayed 메서드를 사용하여 5초 뒤 "요청 완료됨" 메시지가 세팅되도록 한다.

        // 아니오 버튼
        requestDialog.setNegativeButton(titleButtonNo, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
            }
        });

아니오 버튼은 아무 기능도 없다.

        return requestDialog.create();
    }

마지막엔 만들어진 객체를 반환한다.

 

 

3️⃣실행 결과

 

'요청하기' 버튼을 클릭하면 dialog 박스가 뜬다.

(1) 아니오 누를 시 / (2,3) 예 누를 시

 

💩에러 발생

더보기

 

Handler 부분에 문제가 있다는 것 같았다.

보니까 Handler 객체를 생성하지 않아서 발생한 문제. (선언만 해줌)

 

바꿔주니 해결.