본문 바로가기
안드로이드 웹앱 콘테츠 개발자 양성(국비지원)/Thread

Android Studio Thread3

by 차누감 2019. 9. 19.

버튼을 누르면 이미지가 보이는 예제

(이미지는 인터넷의 주소로 가져온다. 내가 이미지 파일이 없어도 됨... Thread와 Stream 사용)

activity_main.xml 코드부터 작성하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
 
tools:context=".MainActivity">
 
<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="load Image"
    android:onClick="clickBtn"/>
<ImageView
    android:id="@+id/iv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
 
</LinearLayout>
 
 

디자인

MainActivity.java 코드 작성하자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
 
import android.graphics.BitmapFactory;
 
 
public class MainActivity extends AppCompatActivity {
 
    ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        iv=findViewById(R.id.iv);
    }
 
    public void clickBtn(View view) {
        //Network상에 있는 이미지를 읽어와서 이미지뷰에 보여주기
        //Network작업은 오래걸리는 작업으로 인지하므로..
        //MainThread에서 작업할 수 없음.
        //별도의 Thread를 생성해서 네트워크 작업을 수행하도록..
        new Thread(){
            @Override
            public void run() {
                //이미지의 경로
                
                //Stream을 열수 있는 (URL)객체 생성
                try {
                    URL url= new URL(imgUrl);
 
                    //무지개로드 (Stream)을 얻어오기
                    InputStream is=url.openStream();
 
                    //스트림을 통해 이미지를 읽어와서
                    //이미지뷰에 설정!
 
                    final Bitmap bm= BitmapFactory.decodeStream(is);//BitmapFactory가 png파일을 비트맵으로 만들어준다.
                    //final로 만든 이유는.. 아래 run메소드에서 지역 변수라 못알아먹으니 final 또는 멤버변수로 해야함.
 
                    //화면 갱신 / UI변경(이미지 변경)은 MainThread만 할 수 있음.
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            iv.setImageBitmap(bm);
                        }
                    });
 
 
                } catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
            }// run() ..
        }.start();
 
    }
}
 
 

위 java 코드 36번 줄에 https://t1.daumcdn.net/news/201901/25/seouleconomy/20190125151705325mnun.png이거는 어떻게 얻는지 알려줌. 원하는 이미지 주소 인터넷에 가져오기

 

 

그리고 중요한 것!!!!!

AndroidManigest.xml 에 한줄만 추가하자 

<uses-permission android:name="android.permission.INTERNET"/>

 

(이미지는 인터넷으로 불러오는 거기 때문에 꼭!!!명시해야 한다!!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
    package="com.lcw.ex33threadnetimage">
 
<!--    이 앱이 인터넷을 사용한다는 허가를 받아야 함-->
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
 
 
 

 

 

댓글