궁금해요

돌나물

사진을 갤러리 or 사진에서 받은 후 저장하고 나서 인텐트로 보내주고 다른 액티비티에서 받는 문제입니다.

작성자 : 돌나물 작성일 : 2016.10.20 22:17:39 댓글수 : 5 조회수 : 1,290

메인 엑티비티가 있고 작성 엑티비티가 있고 수정 엑티비티가 존재합니다.

작성 엑티비티에서 글들과 사진을 넣고 저장을 한 후 메인 엑티비티에 있는 리스트뷰로

인텐트를 보내줍니다. 그 후 리스트뷰에 있는 포지션값을 읽어서 포지션값과 해당 리스트뷰의

아이템들을 인텐트로 다시 수정 엑티비티로 보내줍니다. 이 과정에서 스트링값과 float값은 잘

 

들어오고 uri값도 잘들어오는데 사진은 사라져있습니다. 어떤게 문제가 되고 있는

걸까요?

   final Bundle intent = getIntent().getExtras();
        if(intent!=null){
            TitleText.setText(intent.getString("title"));
            DateText.setText(intent.getString("date"));
            LocalText.setText(intent.getString("local"));
            ContentText.setText(intent.getString("content"));
            Rating.setRating(intent.getFloat("rating"));
            Uri uri = Uri.parse(intent.getString("photo"));
           Bitmap bmimg= BitmapFactory.decodeFile("uri");


            String test1 = intent.getString("photo");
            float test2 = intent.getFloat("rating");

            Log.d("수정하는곳입니다여기는!","수정보이보이"+test2);
            Log.d("수정하는곳입니다여기는!","수정보이보이"+test1);
            Photo.setImageBitmap(bmimg);

        }
    } // 수정하는 액티비티로 넘어가는 메인 액티비티 부분입니다.

 

        btn2_2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Log.d("수정버튼입니다","수정버튼클릭중!@!@!##!#!");
                int choice;
                choice = listview2.getCheckedItemPosition();
                if (choice != listview2.INVALID_POSITION) {
                    new CheckTask(MainActivity_2.this).execute();
                    int pos = listview2.getCheckedItemPosition();

                    Intent IntentTo2 = new Intent(MainActivity_2.this, Activity2_2.class);
                    IntentTo2.putExtra("Key", pos);
                    IntentTo2.putExtra("title",Postitem.get(pos).TitleSource);
                    IntentTo2.putExtra("date",Postitem.get(pos).DateSource );
                    IntentTo2.putExtra("local",Postitem.get(pos).LocalSource );
                    IntentTo2.putExtra("content",Postitem.get(pos).ContentSource );
                    IntentTo2.putExtra("rating",Postitem.get(pos).RatingSource );
                    IntentTo2.putExtra("photo",Postitem.get(pos).PhotoSource );
                    startActivityForResult(IntentTo2,MODY_POSTSCRIPT);
                }
            }
            });// 수정하는 액티비티입니다.



.

첨부파일

  • 보낼 때는

    BitmapDrawable d = (BitmapDrawable)(ImageView)view.findViewById(R.id.imageView1)).getDrawable();

    Bitmap b = d.getBitmap();

    imgview.setImageBitmap(b);

    intent.putExtra("bm", (Bitmap)b);

    받을 때는 

    Bitmap bm = (Bitmap)in.getExtras().get("bm");

    imgview.setImageBitmap(bm);

    이렇게 한 번 시도해보시겠어요?

    그리고 로그도 같이 올려주시면 더 좋을 것 같습니다. 

  •         final Bundle intent = getIntent().getExtras();
            if(intent!=null){
                TitleText.setText(intent.getString("title"));
                DateText.setText(intent.getString("date"));
                LocalText.setText(intent.getString("local"));
                ContentText.setText(intent.getString("content"));
                Rating.setRating(intent.getFloat("rating"));
                Uri uri = Uri.parse(intent.getString("photo"));
               Bitmap bmimg= BitmapFactory.decodeFile("uri");
    
    
                String test1 = intent.getString("photo");
                float test2 = intent.getFloat("rating");
    
                Log.d("수정하는곳입니다여기는!","수정보이보이"+test2);
                Log.d("수정하는곳입니다여기는!","수정보이보이"+test1);
                Photo.setImageBitmap(bmimg);
    
            }

    여기가 수정하는 액티비티이고 로그로 찍어보면 uri값이 정상적으로 오는거 같습니다.

    10-21 13:16:21.851 5058-5058/com.ksh564.task.app_1 D/수정버튼입니다: 수정버튼클릭중!@!@!##!#!
    10-21 13:16:21.891 5058-5058/com.ksh564.task.app_1 D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{bad3b12 V.E...... R.....I. 0,0-0,0}
    10-21 13:16:21.901 5058-5058/com.ksh564.task.app_1 I/Timeline: Timeline: Activity_launch_request id:com.ksh564.task.app_1 time:3114631
    10-21 13:16:21.931 5058-5280/com.ksh564.task.app_1 D/mali_winsys: new_window_surface returns 0x3000,  [1592x720]-format:1
    10-21 13:16:21.941 5058-5058/com.ksh564.task.app_1 D/mainAppActivity: onPause
    10-21 13:16:21.961 5058-5058/com.ksh564.task.app_1 D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
    10-21 13:16:21.981 5058-5058/com.ksh564.task.app_1 W/ResourcesManager: getTopLevelResources: /data/app/com.ksh564.task.app_1-2/base.apk / 1.0 running in com.ksh564.task.app_1 rsrc of package com.ksh564.task.app_1
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: uri: open failed: ENOENT (No such file or directory)
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 D/수정하는곳입니다여기는!: 수정보이보이3.5
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 D/수정하는곳입니다여기는!: 수정보이보이content://media/external/images/media/18069
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 D/Activity: performCreate Call Injection manager
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 I/InjectionManager: dispatchOnViewCreated > Target : com.ksh564.task.app_1.Activity2_2 isFragment :false
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 D/SecWifiDisplayUtil: Metadata value : SecSettings2
    10-21 13:16:22.011 5058-5058/com.ksh564.task.app_1 D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{2a8ea15 I.E...... R.....ID 0,0-0,0}
    10-21 13:16:22.031 5058-5280/com.ksh564.task.app_1 D/mali_winsys: new_window_surface returns 0x3000,  [1440x2560]-format:1
    10-21 13:16:22.051 5058-5058/com.ksh564.task.app_1 I/InjectionManager: dispatchCreateOptionsMenu :com.ksh564.task.app_1.Activity2_2
    10-21 13:16:22.051 5058-5058/com.ksh564.task.app_1 I/InjectionManager: dispatchPrepareOptionsMenu :com.ksh564.task.app_1.Activity2_2
    10-21 13:16:22.061 5058-5058/com.ksh564.task.app_1 D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 96 - 0, 0) vi=Rect(0, 96 - 0, 0) or=1
    10-21 13:16:22.091 5058-5280/com.ksh564.task.app_1 D/OpenGLRenderer: endAllActiveAnimators on 0x7f71496c00 (RippleDrawable) with handle 0x7f6fac8860
    10-21 13:16:22.091 5058-5058/com.ksh564.task.app_1 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@864b30e time:3114829
    10-21 13:16:22.331 5058-5058/com.ksh564.task.app_1 D/mainAppActivity: onStop1
    10-21 13:16:22.331 5058-5058/com.ksh564.task.app_1 D/Main: ziziz1
    10-21 13:16:22.331 5058-5058/com.ksh564.task.app_1 V/ActivityThread: updateVisibility : ActivityRecord{53466a5 token=android.os.BinderProxy@1a7dd4e {com.ksh564.task.app_1/com.ksh564.task.app_1.MainActivity_2}} show : false
    10-21 13:16:24.401 5058-5058/com.ksh564.task.app_1 D/ViewRootImpl: #3 mView = null

  • BitmapFactory.decodeFile ("uri")에서 uri는 파일을 가르키는 변수가 아니라 uri라는 문자열이니

    그런 파일이 없다는 예외가 발생했네요.

  • 개발환경이 안드로이드 6.0(마시멜로우) 이상이시라면, 퍼미션 획득 방식이 런타임으로 변경되면서 갤러리 등의 내부 영역의 파일을 얻어오지 못하는 경우가 있는데  

    Permission Denial:android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 과 같은 에러가 발생할 수도 있습니다. 이럴 경우,

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>

    퍼미션을 추가하여 해결이 가능합니다

  • final Uri image = Uri.parse(intent.getStringExtra("image"));

    답변감사합니다. 인텐트에 실린 스트링으로 이루어진 uri값을 다음과 같이 파싱해서 받고 

    셋해줘서 이미지뷰에 싣어주니 잘됩니다. 중간에 퍼미션 문제가 걸렸는데 일단 제 핸드폰 어플리케

    이션으로 수동적으로 바꿔주었더니 임시적으로 해결되었네요~~

  • 댓글을 입력 하시려면 로그인 해주세요.