2014-11-20 2 views
0

갤러리에서 이미지를 가져 와서 imageView의 초기 이미지를 바꾸고 싶습니다. 갤러리에서 이미지를 선택하더라도 변경되지 않습니다.조각을 사용하여 갤러리에서 이미지를 가져올 수 없습니다.

중단 점을 사용하여 어딘가까지 정상적으로 작동하는지 조사했습니다. onActivityResult의 try-catch의 다음 코드 부분이 원인 인 것 같습니다.

InputStream in = getActivity().getContentResolver().openInputStream(data.getData()); 

이미지의 원인은 무엇입니까?

public class Fragment1 extends Fragment { 

    private static final int REQUEST_GALLERY = 0; 
    private int viewWidth, viewHeight; 
    private ImageView imageView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceBundle){ 

     final View view = inflater.inflate(R.layout.fragment_person_create, container, false); 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image); 
     imageView = (ImageView) view.findViewById(R.id.image_id); 
     imageView.setImageBitmap(bmp); 
     imageView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // To Gallery 
       Intent intent = new Intent(); 
       intent.setType("image/*"); 
       intent.setAction(Intent.ACTION_GET_CONTENT); 
       startActivityForResult(intent, REQUEST_GALLERY); 
      } 
     }); 
     Button btn = (Button)view.findViewById(R.id.bt_saveperson); 
     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       EditText name = (EditText)view.findViewById(R.id.et_name); 
       /* save data */ 
      } 
     } 
     return view; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) { 
      try { 
       InputStream in = getActivity().getContentResolver().openInputStream(data.getData()); 
       Bitmap bitmap = BitmapFactory.decodeStream(in); 
       in.close(); 
       imageView.setImageBitmap(bitmap); 
      } catch (Exception e) { 
      } 
     } 
    } 
} 

업데이트

public String getAbsolutePath(Uri uri) { 
     Log.v("tag", "666"); 
     if(Build.VERSION.SDK_INT >= 19){ 
      Log.v("tag", "777"); 
      String id = uri.getLastPathSegment().split(":")[1]; 
      Log.v("tag", "888"); 
      final String[] imageColumns = {MediaStore.Images.Media.DATA }; 
      final String imageOrderBy = null; 
      Uri tempUri = getUri(); 
      Cursor imageCursor = getActivity().getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy); 
      if (imageCursor.moveToFirst()) { 
       return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
      }else{ 
       return null; 
      } 
     }else{ 
      String[] projection = { MediaColumns.DATA }; 
      Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null); 
      if (cursor != null) { 
       int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
       cursor.moveToFirst(); 
       return cursor.getString(column_index); 
      } else 
       return null; 
      } 
     } 
    } 
    private Uri getUri() { 
     String state = Environment.getExternalStorageState(); 
     if(!state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) 
      return MediaStore.Images.Media.INTERNAL_CONTENT_URI; 

     return MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
    } 

로그 캣은

11-20 05:41:20.295: V/tag(1647)    : 666 
11-20 05:41:20.295: V/tag(1647)    : 777 
11-20 05:41:20.325: W/EGL_emulation(1647) : eglSurfaceAttrib not implemented 
11-20 05:41:20.575: W/MediaFocusControl(1272): RemoteControlClient died 
11-20 05:41:20.575: I/ActivityManager(1272) : Killing 1498:com.android.music/u0a32 (adj 15): empty #17 
11-20 05:41:20.935: I/ActivityManager(1272) : Killing 1437:com.android.printspooler/u0a39 (adj 15): empty #17 
11-20 05:41:20.975: D/(935): HostConnection: :get() New Host Connection established 0xb7e00a40, tid 1896 

답변

0

를 사용하여 사용자 정의 함수를 가져 오기 이미지 bitamp의 절대 경로 얻을 :)

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode == REQUEST_GALLERY && resultCode == Activity.RESULT_OK) { 
     try { 
      imageView.setImageBitmap(BitmapFactory.decodeFile(getAbsolutePath(data.getData()))); 
     } catch (Exception e) { 
     } 
    } 
} 

public String getAbsolutePath(Uri uri) { 
    if(Build.VERSION.SDK_INT >= 19){ 
     String id=""; 
     if(uri.getLastPathSegment().split(":").length>0){ 
      id = uri.getLastPathSegment().split(":")[1]; 
     }else{ 
      id = uri.getLastPathSegment().split(":")[0]; 
     } 
     final String[] imageColumns = {MediaStore.Images.Media.DATA }; 
     final String imageOrderBy = null; 
     Uri tempUri = getUri(); 
     Cursor imageCursor = getContentResolver().query(tempUri, imageColumns,MediaStore.Images.Media._ID + "="+id, null, imageOrderBy); 
     if (imageCursor.moveToFirst()) { 
      return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
     }else{ 
      return null; 
     } 
    }else{ 
     String[] projection = { MediaColumns.DATA }; 
     Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
     if (cursor != null) { 
      int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else 
      return null; 
    } 
} 
+0

방법 getUri을 (정의되지 않습니다. 어떻게해야합니까? –

+0

메소드 getUri()를 추가하십시오. http://stackoverflow.com/questions/25262463/upload-the-picture-from-gallery-or-camera-by-alertdialogue/25262671#25262671 –

+0

작동하지 않습니다. 어떻게해야합니까? –

관련 문제