메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

이전 포스팅과 마찬가지로 네트워크를 통한 작업임으로 주의해야할 사항이 2가지 있다.



1. 안드로이드는 네트워크 작업시 "백그라운드 스레드"로 동작을 시켜야한다.(대용량 데이터를 네트워크로 가져오는 동안 다른 작업은 할 수 없게 될 수 있음으로...)

2. 백그라운드 스레드에서는 메인 뷰 화면을 제어할 수 없다. 따라서 가져온 이미지를 백그라운드 스레드에서 적용할 수가 

없다. 따라서, 핸들러에게 대신 요청을 해주어야 한다.

3. 인터넷을 사용해야 함으로 manifest에 인터넷 사용 권한을 추가해 주어야 한다.



라는 사항을 유의하고 작업하면 그 외의 부분은 이전과 거의 유사하다.

나머지는 코드의 주석을 통해 설명하겠습니다.


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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.example.kscs.androidspringconnection1;
 
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
 
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
 
public class ImageDownActivity extends AppCompatActivity
                                implements Runnable{
 
    // 1. 변수 선언
    Button button1;
    ImageView img1;
    Bitmap bitmap; // 비트맵 객체
    // 메인 스레드와 백그라운드 스레드 간의 통신
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // 서버에서 받아온 이미지를 핸들러를 경유해 이미지뷰에 비트맵 리소스 연결
            img1.setImageBitmap(bitmap);
        }
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_down);
 
        // 2. 위젯 연결
        button1 = (Button)findViewById(R.id.button1);
        img1 = (ImageView)findViewById(R.id.img1);
 
        // 3. 서버에 이미지를 하나 넣어놓자.
        // /resources/images/이미지.png 처럼 올려 놓자.
        // 그냥... 환경설정에 자원 경로로 등록 된 곳에 올리면 된다.
 
        // 4. 버튼 클릭 이벤트
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 네트워크 연결 작업시 이미지 가져오는 것도 대량의 데이터임으로
                // 반드시!! 백그라운드 스레드에서 작업해야한다.
                // 또한, 역시 마찬가지로 백그라운드 스레드는 메인뷰 화면은 제어할 수 없어
                // 핸들러에게 부탁해서 작업해야함!
                // + 인터넷 접속 권한 필요!(MAINFEST에 추가)
 
                // 백그라운드 스레드 생성
                Thread th = new Thread(ImageDownActivity.this);
                // 동작 수행
                th.start();
            }
        });
 
    }
 
    // 백그라운드 스레드
    @Override
    public void run() {
        URL url = null;
        try{
            // 스트링 주소를 url 형식으로 변환
            url = new URL("http://192.168.0.127/resources/images/like1.png");
            // url에 접속 시도
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.connect();
            // 스트림 생성
            InputStream is = conn.getInputStream();
            // 스트림에서 받은 데이터를 비트맵 변환
            // 인터넷에서 이미지 가져올 때는 Bitmap을 사용해야함
            bitmap = BitmapFactory.decodeStream(is);
 
            // 핸들러에게 화면 갱신을 요청한다.
            handler.sendEmptyMessage(0);
            // 연결 종료
            is.close();
            conn.disconnect();
 
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

List of Articles
번호 제목 날짜 조회 수
33 AJAX 통신시 컨트롤러에서 한글 문자열을 리턴해야하는 경우 인코딩 문제 처리 2018.07.04 41
32 스프링에서 구글맵 연동하기 2018.07.04 54
31 스프링과 안드로이드 연동1(Html 소스 가져오기) 2018.07.04 53
» 스프링과 안드로이드 연동2 : 서버에서 안드로이드로 이미지 가져오기(다운) 2018.07.04 56
29 스프링과 안드로이드 연동3 : ( 서버에서 XML로 반환해 가져오기 ) 2018.07.04 51
28 스프링과 안드로이드 연동4 : (JSON으로 가져오기) file 2018.07.04 49
27 스프링과 안드로이드 연동5 : (Javascript에서 Android 함수 호출하기) 2018.07.04 52
26 JAVA Crawling(크로울링) 기본([펌]http://partnerjun.tistory.com/guestbook) file 2018.07.04 45
25 [펌]자바 Crawling(크로울링) 로그인 해 긁어오기 file 2018.07.04 47
24 [펌]자바 Crawling(크로울링) Ajax로 요청하는 것 긁어오기 file 2018.07.04 51
23 쿠키와 세션을 이용한 자동 로그인 처리 file 2018.07.04 57
22 스프링 외부 경로 폴더 지정하기 2018.07.04 39
21 play framework + 이클립스 초간단 개발환경 구축법 2016.12.07 913
20 루씬 기본적인 검색 엔진 - 샘플 예제 file 2016.12.07 3369
19 [패스트캣]1. 시작하기 - 설치 file 2016.12.07 3016
18 검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch 2016.12.07 2788
17 검색엔진 (1) - 검색엔진의 이해 2016.12.07 2547
16 Nutch 0.9 를 이용하여 한글 검색하기 2016.12.07 2699
15 solr적용시 사용법 2016.12.07 2673
14 Spring Framework 개요 2016.12.07 2493
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved