본문 바로가기
Android/그림으로 쉽게 설명하는 안드로이드 프로그래밍 개정6판

[Android/그림으로 쉽게 설명하는 안드로이드 프로그래밍 개정6판]그림으로 쉽게 설명하는 안드로이드 프로그래밍(개정6판) 연습문제 13장

by starfish22 2022. 12. 7.
728x90

정답이 아닐 수 있습니다. 오류가 있으면 알려주세요ㅎ

 

1. 2번 메인 스레드

 

2. 3번 네트워크 접근

 

3. 2번 run()

 

4. 3번 실행 오류가 발생한다.

 

5. 1번 post()

 

6. 2번 doInBackground()

 

7.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:text="00:00:00"
        android:textStyle="bold"
        android:textSize="70dp"
        android:layout_gravity="center"
        android:layout_marginTop="200dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="50dp"
        android:gravity="center">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/start"
            android:text="타이머 시작"
            android:layout_margin="5dp"
            android:backgroundTint="#6600CC"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/stop"
            android:text="타이머 중지"
            android:layout_margin="5dp"
            android:backgroundTint="#FF0066"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/reset"
            android:text="타이머 리셋"
            android:layout_margin="5dp"
            android:backgroundTint="#339999"/>
    </LinearLayout>

</LinearLayout>

 

MainActivity.java

package kr.co.company.ch13;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    Thread w;
    boolean running = false;
    private int i = 0, mSec, sec, min;
    private Button start, stop, reset;
    private TextView textView;

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

        textView = findViewById(R.id.text);
        start = findViewById(R.id.start);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (running == false) {
                    running = true;
                    new StopWatch().execute(0);
                }
            }
        });
        stop = findViewById(R.id.stop);
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                running = false;
            }
        });
        reset = findViewById(R.id.reset);
        reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                i = 0;
                textView.setText("00:00:00");
            }
        });
    }

    class StopWatch extends AsyncTask<Integer, Integer, Integer> {
        @Override
        protected void onPreExecute() {
        }

        @Override
        protected Integer doInBackground(Integer... value) {
            while (running) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                i++;
                publishProgress(0);
            }
            return 0;
        }

        @Override
        protected void onProgressUpdate(Integer... value) {
            mSec = i % 100;
            sec = (i / 100) % 60;
            min = (i / 100) / 60;
            textView.setText(String.format("%02d:%02d:%02d", min, sec, mSec));
        }

        @Override
        protected void onPostExecute(Integer value) {
        }
    }
}

 

결과

728x90

댓글