2

내 안드로이드 응용 프로그램 코드와 함께 고군분투에 설정할 수 없습니다안드로이드 다운로드 이미지 ... OK intentservice를 통해 그러나 이미지 뷰

내가 (AN intentService를 통해) 사진을 다운로드하려고 다음으로 표시 할 LinearLayout에 ImageView를 추가합니다.

지금까지 그렇게 좋았습니다. 나는 다운로드를 관리하는 intentservice에 의해 나의 절대 경로를 보냈습니다. 나는 그 길 이름으로 축배를 받는다.

하지만 ... 이미지 뷰를 추가하여 사진을 표시 할 수 없습니다 그리고 난 정말 이유를 알고하지 않습니다 ...

은 처음에는 내 핸들러가 레이아웃에 도달 할 수 있다고 생각하지만 난에 관리 setImageResource를 사용하여 내 자원의 임의의 이미지를 표시하십시오. 나의 주요 활동에

Messenger messenger = (Messenger) extras.get("MESSENGER"); 
Message msg = Message.obtain(); 
msg.arg1 = result; 
msg.obj = output.getAbsolutePath(); 
try { 
    messenger.send(msg); 
} etc... 

, 내가 가진 : 그래서 난 내 Intentservice에서

이 내가 가진 (출력 내 파일의 이름입니다) ... 문제가 하나 setimagebitmap 또는 bitmapfactory 디코딩에서 오는 것 같아요 :

Private Handler handler = new Handler() { 
    public void handleMessage(Message message) { 

     // I Get the message 
     Object path = message.obj; 

     //Check if download went ok 
     if (message.arg1 == RESULT_OK && path != null) { 
     Toast.makeText(Update3sur3.this, 
      "Downloaded" + path.toString(), Toast.LENGTH_LONG) 
      .show(); 

      //Try to display the pic 
      LinearLayout res2=(LinearLayout)findViewById(R.id.reslayout2); 
     ImageView imgView2 = new ImageView(Update3sur3.this); 
     Bitmap bitmap= BitmapFactory.decodeFile(path.toString()); 
     imgView2.setImageBitmap(bitmap); 
     res2.addView(imgView2); 
    } else { 
     Toast.makeText(Update3sur3.this, "Download failed.", 
      Toast.LENGTH_LONG).show(); 
     } 
    }; 
    }; 

대단히 감사합니다.

로랑

+0

당신이 직면 한 문제는 무엇입니까? 강제 종료 또는 이미지가 표시되지 않습니까? –

답변

1

처음에는 내가 제대로 즉, 파일에 액세스하려면 다음 단계를 수행 할 수있는 경우 있는지 확인하려고 할 것입니다 :

  1. decodeByteArray (바이트 [] 데이터를 사용 오프셋 INT, INT 길이) 메서드 대신에 BitmapFactory.decodeFile (path.toString())

  2. 이 새로운 메서드를 사용하려면 파일의 바이트 배열을 직접 읽어야합니다. 추가 단계가 추가되지만, 파일을 올바르게 읽는 중입니다.

  3. 사용 FileInputStream에 바이트를

파일 imageFile = 새로운 파일 (경로)를 읽어; byte imageData [] = 새 바이트 [(int) imageFile.length()]; = BufferedInputStream을 신규에

BufferedInputStream을 (새로운 또는 FileInputStream (imageFile)

in.read (imageData의 0 (INT) imageFile.length());

Log.d ("" "

// 이제 imageData는 이미지를 생성 할 때 사용할 바이트 배열입니다. decodeByteArray (imageData) (이미지 파일 크기 : "+ imageFile.length()); // 여기를 확인하십시오. , 0, (int) imageFile.length());

이미지가 여전히 표시되지 않으면 로깅 명령문을 넣고 이미지의 크기를 인쇄하여 올바른지 확인하십시오.

+0

FileInputStream과 함께 작동합니다. 고맙습니다. –

+0

환영합니다. 대답을 수락하십시오. –

+0

@LaurentMilleron 문제가 해결되어 다행입니다.당신이 뭔가 유용한 것을 발견하고 upvote 그리고 문제가 해결 되었다면 대답을 수락하십시오. –

관련 문제