2012-10-07 2 views
0

내 앱에서 사용자는 갤러리에서 아바타로 사진을 선택할 수 있지만 파일을 삭제할 수 있도록 내 앱 저장소에 저장하고 싶습니다.갤러리에서 앱 외부 저장소로 파일 저장하기

내 코드 :

//onActivityResult() 
else if (requestCode == SELECT_PICTURE) 
      { 
       mFile = new File(getRealPathFromURI(data.getData())); 

       Date d = new Date(); 
       long ms = d.getTime(); 
       mName = String.valueOf(ms) + ".jpg"; 

       copyfile(mFile,mName); 

       File file = new File(Environment.getExternalStorageDirectory(), mName); 
       Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 
       imgPhoto.setImageBitmap(myBitmap); 

      } 

    public String getRealPathFromURI(Uri contentUri) 
{ 
    // can post image 
    String [] proj={MediaStore.Images.Media.DATA}; 
    Cursor cursor = managedQuery(contentUri,proj,null,null,null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 


    private void copyfile(File file,String newFileName){ 
    try{ 
     InputStream in = new FileInputStream(file); 
     OutputStream out = openFileOutput(newFileName, MODE_PRIVATE); 
     byte[] buf = new byte[4096]; 
     int len; 
     while ((len = in.read(buf)) > 0){ 
     out.write(buf, 0, len); 
     } 
     in.close(); 
     out.close(); 
     Log.d(null,"success"); 
    } 
    catch(FileNotFoundException ex){ 
     ex.printStackTrace(); 
    } 
    catch(IOException e){ 
     e.printStackTrace();  
    } 
    } 

제가 비트 맵을 디코딩 MFILE

경우, 이미지가 도시되어 MFILE 이미지를 갖도록. ¿ 어떤 아이디어?

답변

2

음, 우선 ... 당신은 현재 우리에게 당신이 얻고있는 행동을 말하지 않았습니다. 앱이 다운 되나요? 그림이 표시되지 않습니까? 다른 예기치 않은 동작이 있습니까? 그 외에는

: 응용 프로그램에 쉽게 지연을 도입 할 수 있도록

  1. managedQuery()를 사용하지 마십시오는 ... 그것은 메인 UI 스레드에서 실행합니다. 이상적으로는 CursorLoader을 사용하고 싶지만 AsyncTask에 모든 작업을 래핑하는 것이 더 쉽습니다 ("모든 작업"은 이미지 파일을 저장/검색/디코딩하는 것과 관련된 모든 작업을 의미합니다). 이 모든 것을 수행하는 데 상당한 시간이 걸릴 수 있으며, UI 스레드가 너무 오래 차단 된 경우 앱이 느리게 보일 수 있으므로이 방법을 제안합니다.

  2. 는 (나는 당신이 제안하는)을 AsyncTask에서 작업을 마무리하기 위해 선택하는 경우, doInBackground()에서 모든 작업을 넣어 당신이 onPostExecute()에 완료되면 그에 따라 UI를 업데이트합니다.

+0

팁 주셔서 감사합니다 !! ImageView에서 imagebitmap을 설정할 때 imageView가 투명하게 보이므로로드 할 데이터가없는 것 같습니다. 비트 맵에 mFile을로드하면 이미지가 나타나므로 이미지 검색이 괜찮다고 생각합니다. – JesusS

관련 문제