2012-06-14 3 views
1

나는 수많은 게시물을 검토 한 결과이 기능을 사용할 수없는 이유를 알 수 없습니다. 사용자가 갤러리 앱을 여는 버튼을 클릭하면됩니다. 그런 다음 사용자는 갤러리를 자동으로 닫는 그림을 선택하고 자동으로 해당 이미지를 ImageView로 설정하는 응용 프로그램으로 돌아갑니다.안드로이드 - 갤러리 이미지를 ImageView로 설정할 수 없습니다.

지금까지 응용 프로그램으로 돌아갈 때까지 모든 작업을 수행했습니다. 모두 괜찮아 보이지만 이미지가 ImageView에 나타나지 않습니다. 얻을하려면 코드의 나머지 여기

ImageView targetImage; 

그리고있다 :

<ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="14dp" 
     android:layout_gravity="center_horizontal" /> 

내 활동의 시작 부분에서 나는이 가진 이미지 뷰를 설정 : 여기

는 이미지 뷰에 대한 XML 코드 이미지를 내 ImageView로 설정하십시오. "setGunImage"를 시작하는 버튼이 있습니다.

public void setGunImage(View view) { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 
      targetImage = (ImageView)findViewById(R.id.imageView1); 
      Uri selectedImageUri = data.getData(); 
      targetImage.setImageURI(selectedImageUri); 
     } 
    } 
} 

나는 sd 카드가 활성화 된 시뮬레이터와 실제 장치에로드 된 이미지 모두에서이를 테스트했습니다. 둘 다 똑같은 행동을합니다. 갤러리 단계를 거치지 만 응용 프로그램으로 돌아 가면 ImageView에로드 된 이미지가 없습니다.

데이터를 비트 맵으로 변경하고 설정해 보았지만 결코 나타나지 않았습니다. 나는 그것이 아마 바라는 단지 슈퍼의 무엇인가 단순한 I 'm를 알고있다. 그래서 희망을 갖고 새로운 쌍의 눈은 나를 바른 방향에서 조준 할 수있다. 감사.

답변

1

을하고 당신은 또한 link

에서이 방법을

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      InputStream stream = null; 
     if(resultCode==RESULT_OK) 
      { 
       if(requestCode==SELECT_PICTURE) 
       { 
       try { 
        // We need to recyle unused bitmaps 
        if (bitmap != null) { 
         bitmap.recycle(); 
        } 
        stream = getContentResolver().openInputStream(data.getData()); 
        bitmap = BitmapFactory.decodeStream(stream); 

           targetImage = (ImageView)findViewById(R.id.imageView1); 
        targetImage.setImageBitmap(bitmap); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } finally { 
        if (stream != null) 
         try { 
          stream.close(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
       } 
      super.onActivityResult(requestCode, resultCode, data); 
     } 

} 

을 시도 할 수 있습니다

+0

ohh이 경우 requestCode == REQUEST_CODE는 requestCode == SELECT_PICTURE ... –

+0

이 질문을 게시 한 후 방금 말씀 드린 내용을 깨닫고 코드를 SELECT_PICTURE로 변경했습니다. 불행히도, 나는 여전히 같은 문제를 겪고 있습니다. 갤러리를 잘로드하지만 사진을 선택하면 다시 내 앱으로 보내고 ImageView는 공백으로 남습니다. 나는 그것이 왜 이미지를 설정하지 않을 지 알 수 없다. 당신의 도움을 주셔서 감사합니다. – dcabal

+0

문제의 전체 활동 코드를 업데이트하십시오 .... –

1

당신은 setImageURI에 URI를 건네 주므로 이미지의 첫 번째 경로는 MediaStore.Images.Media.DATA을 사용하고 URI는 setImageURI의 이미지 경로를 전달합니다. 이 방법으로 시도 : 나는 이므 란 솔루션은 잘 작동합니다 .............. 생각

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode==RESULT_OK) 
     { 
      if(requestCode==SELECT_PICTURE) 
     { 
      targetImage = (ImageView)findViewById(R.id.imageView1); 
      Uri selectedImageUri = data.getData(); 
      String selectedImagePath=getPath(selectedImageUri); 
      targetImage.setImageURI(selectedImageUri); 
      } 
     } 
    } 

    private String getPath(Uri uri) 
     {  
     String[] projection={MediaStore.Images.Media.DATA}; 
     Cursor cursor=managedQuery(uri,projection,null,null,null); 
     int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
+1

답장을 보내 주셔서 감사합니다.하지만 불행히도 여전히 작동하지 않습니다. 갤러리를로드하고 나에게 사진을 선택하게합니다. 사진을 선택하면 내 앱으로 돌아오고 ImageView는 여전히 비어 있습니다. 다른 아이디어? – dcabal

관련 문제