본문 바로가기
Study/Android

MySQL에 저장된 IMAGE BLOB Android에서 보기

by Answer Choi 2017. 7. 31.
반응형


이전 시간에는 Android에서 Image를 MySQL에 저장하는 내용을 다뤘습니다.


이번 시간에는 반대로 MySQL에서 Image를 가져와서 Android에 보여주는 내용입니다.


이전 내용을 보시려면


ANDROID에서 IMAGE BLOB MYSQL에 저장하기



위 링크를 클릭하세요^^


먼저 예제 소스코드입니다.


PHP 예제소스 코드


Android 예제소스 코드


DB 구조



DB구조는 지난 번과 같습니다.



PHP 


1
2
3
4
5
6
7
8
9
10
11
$result=mysql_query("select * from imagetest",$con);
$cnt=0;
$arr=array();    
while($row=mysql_fetch_array($result)){
        
    $count=$cnt;        
    $arr[$count]['IMAGE']=base64_encode($row[1]);
    $arr[$count]['NO']=$row[0];
    $cnt++;
}
print(json_encode($arr));
cs



Line 1 : MySQL에서 모든 데이터를 가져옵니다.


Line 2~3 : 이 데이터가 한개가 아니기 때문에 배열로 넣어야 합니다.


Line 4~10 : 쿼리한 데이터를 Json Array형태로 집어넣습니다.


Line 7 : 실제 저장된건 바이너리 형태이므로 쿼리해서 base64로 인코딩해서 넣어줘야 합니다.




안드로이드 


레이아웃은 조금 바뀌었습니다.



위쪽은 MySQL에서 가져오는 부분이고, 아래쪽은 MySQL에 넣는 쪽입니다.


갱신 버튼을 누르면 MySQL에 가져옵니다.


가져오기 버튼은 MySQL에 저장할 이미지를 가져오는 버튼이고, 


저장하기 버튼은 가져온 이미지를 MySQL에 저장하는 버튼입니다.


MySQL에 저장하는 건 지난 시간에 했으니, MySQL에서 가져오는 부분만 보겠습니다.


갱신 버튼을 누르면 스레드를 통해 PHP파일을 실행하고, Json Array형태로 받습니다.


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
static public void load_image(String result){
    if(result.contains("false")){
        Toast.makeText(mContext, "이미지를 가져오지 못했습니다.", Toast.LENGTH_SHORT).show();
    }else{
        Bitmap[] getBlob;
        String[] getNo;
        try{
            JSONArray jArray=new JSONArray(result);
            list_cnt=jArray.length();
            getNo=new String[list_cnt];
            getBlob=new Bitmap[list_cnt];
            for(int i=0;i<list_cnt;i++){
                JSONObject jsonObject=jArray.getJSONObject(i);
                getNo[i]=jsonObject.getString("NO");
                getBlob[i]=StringToBitMap(jsonObject.getString("IMAGE"));
            }
            list.setNo(getNo);
            list.setBlob(getBlob);
            list.notifyDataSetChanged();
        }catch (Exception e){
            String temp=e.toString();
            while (temp.length() > 0) {
                if (temp.length() > 4000) {
                    Log.e("imageLog", temp.substring(04000));
                    temp = temp.substring(4000);
                } else {
                    Log.e("imageLog",  temp);
                    break;
                }
            }
        }
    }
    pd.cancel();
}
cs


이 부분은 Json Array형태로 받고나서 처리되는 부분입니다.


Line 2~3 : MySQL 쿼리가 잘못되었을 경우 들어가는 부분입니다.


Line 5~6 : 가져온 데이터를 넣을 배열입니다.


Line 8~11 : 가져온 Json Array로 데이터를 넣을 배열을 초기화합니다.


Line 12~16 : JsonArray에서 파싱하여, 데이터를 저장합니다.


Line 17~19 : 리스트뷰에 뿌리고, 화면을 갱신합니다.(여기까지하면 화면에 나타납니다.)


Line 20~31 : Json Parsing 실패시 로그를 뿌려줍니다.







실행모습



앱을 처음 실행했을 때의 모습입니다.



갱신 버튼을 눌러 MySQL에 저장된 이미지를 가져왔습니다.



MySQL에 추가하기위해 이미지를 불러왔습니다.



이미지를 MySQL에 저장한 후 저장된 이미지를 다시 가져왔습니다.


16번 이미지가 추가된 걸 확인하실 수 있습니다.




실행영상





반응형

인기글