마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

사진을 경로로 db에 저장/호출하는 방법을 알고 싶어요!

0 추천

현재 갤러리에 있는 사진을 불러서 화면(imageView)에 보여주는 것까지 성공했습니다.

다음으로 필요한 부분이 불러온 사진을 table의 String photo 컬럼 << 여기에 경로로 저장하는 것입니다.

그래서 한 번 선택해서 저장한 사진은 그 화면을 다시 켰을때 보여지도록 하는 것이 최종 목표입니다!

   {
// onCreate 함수 안으로 이미지와 상관없는 부분 구현
// 이 아래부터가 질문하는 소스입니다.
        ImageView myimage = (ImageView)findViewById(R.id.img);
        myimage.setOnClickListener(new View.OnClickListener() {
             
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent(Intent.ACTION_PICK);
                i.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
                i.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); // images on the SD card.
                startActivityForResult(i, REQ_CODE_PICK_PICTURE);
            }
        });
    }
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQ_CODE_PICK_PICTURE
                || requestCode == CAMERA_PIC_REQUEST) {
            if (resultCode == Activity.RESULT_OK) {
                ImageView img = (ImageView)findViewById(R.id.img);
                Uri iuri= data.getData();
                try {
                    Images.Media.getBitmap(getContentResolver(), iuri);
                    img.setImageURI(iuri);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

위 소스를 통해 갤러리로부터 불러온 사진을 "경로"로 테이블의 컬럼에 저장하려면 어떻게 하면 될까요?

알려주시면 감사하겠습니다....

사자87 (240 포인트) 님이 2014년 12월 18일 질문

2개의 답변

0 추천
DB사용법을 물어보시는건가요?

아님 어떻게 넣는지를 물어보시는건가요?

어떻게 라고하면 그냥 uri를 넣으면 됩니다.

DB사용법을 물으신다면 사용법을 검색을해보시면나옵니다.
기초개발자 (24,060 포인트) 님이 2014년 12월 18일 답변
이미 db 구현은 되어있구요, 현재 제목이랑 내용은 저장해서 사용하고 있습니다.

거기에 사진 경로 칼럼을 추가해서 화면에서 호출한 사진을 저장해서 스트링형으로 담고 싶은데,

그 부분을 어떻게 구현해야할지 모르겠어서요!!

관련 글들을 살펴봤는데, 정확하게 그 사진을 uri로 받아서 스트링으로 저장하는 법을 모르겠습니다...ㅠ
그러니깐 이미지를 앨범에서 검색을 해오면 uri:// 뭐 이런식으로 나오잖아요.
그 스트링값만 DB에 사진경로컬럼에 담습니다.
그럼 필요할때마다 uri만 끄집어내서 bitmap을만든뒤에 붙이면되죠.
호출한 사진을 String형태로 담는게아니라 uri경로만 담아서 다시 bitmap으로 변경하면됩니다.
직접 사진을 string으로 변경해서 db에 담는건 sqlite에서 지원하는지 모르겠는데
보통 base64로 쪼개서 담습니다.
답변 감사합니다..
화면에 띄어주기 위한 populate() 함수에 있는
Uri uri = Uri.parse(memo.getString(memo.getColumnIndexOrThrow(MemoDbAdapter.KEY_PHOTO)));
이 부분에서 널포인트 에러가 발생하는데, 왜 그럴까요?ㅠㅠ
테이블의 값에 경로 저장이 제대로 안되서 그런걸까요...?
위에 소스에서 onActivityResult안에  iuri를 db에 담으면 됩니다.
널포인터익셉션이 뜨는건 로그캣에 몇번쨰줄에 널포인터가 뜨는지 나오니깐 확인해보시면될거같은데요..
아님 로그캣을 올려주세요.
0 추천

db를 구현하셨다는 얘기는 이미 insert도 된다는것인데

그럼 그부분 빼고 단지 uri to string 궁금하신건가요?

 

protected void onActivityResult(int requestCode, int resultCode, Intent intent)
 { 
   if (requestCode == PICK_REQUEST_CODE)
  {
  if (resultCode == RESULT_OK)
  {
     Uri uri = intent.getData();
 
         if (uri.getScheme().toString().compareTo("content")==0)
         {      
             Cursor cursor =getContentResolver().query(uri, null, null, null, null);
             if (cursor.moveToFirst())
             {
                 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
 //Instead of "MediaStore.Images.Media.DATA" can be used "_data"
 
                 Uri filePathUri = Uri.parse(cursor.getString(column_index));
                 String file_name = filePathUri.getLastPathSegment().toString();
                 String file_path=filePathUri.getPath();
                 Toast.makeText(this,"File Name & PATH are:"+file_name+"\n"+file_path, Toast.LENGTH_LONG).show();
             }
         }
  }
   }
 
 
doridori2013@nate.com

 

 

 

익명사용자 님이 2014년 12월 18일 답변
답변 감사드립니다.
작성해주신 부분이 선택한 사진의 이름과 경로를 받아오는 부분인데요,
그 받아온 경로를 테이블에 저장해주고, 다시 해당 화면을 띄웠을때,
저장해둔 경로를 이용해서 사진을 보여주려면,
어떻게 하면 좋을까요?
ur_imageview.setImageBitmap(uri) <== 요걸말씀하시나요
답변 감사합니다.
화면에 띄어주기 위한 populate() 함수에 있는
Uri uri = Uri.parse(memo.getString(memo.getColumnIndexOrThrow(MemoDbAdapter.KEY_PHOTO)));
이 부분에서 널포인트 에러가 발생하는데, 왜 그럴까요?ㅠㅠ
테이블의 값에 경로 저장이 제대로 안되서 그런걸까요...?
...