마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

비트맵 팩토리에서 자꾸 null값을 리턴합니다..(BitmapFactory)

0 추천

class PdfThread extends Thread{
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void run() {
        try {

            pdfClient = new Socket("192.168.0.69", 5500);

           while(true){
               try {
                   byte[] buf = new byte[1024];
                   
                   while(pdfClient.getInputStream().read(buf)>0){
                        System.out.println(pdfClient.getInputStream());

                       Bitmap bitimg = BitmapFactory.decodeStream(pdfClient.getInputStream());
                       System.out.println(bitimg);
                       final Drawable drawable = new BitmapDrawable(getResources(), bitimg);
                       System.out.println("오고있니");
                       runOnUiThread(new Runnable() {

                           public void run() {

                               about_bt.setBackground(drawable);

                           }

                       });
                   }

               } catch (IOException e) {
                   e.printStackTrace();
               }

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

위와 같이 코드를짰고, 서버에서 정상적으로 보내는것으로 보입니다.

10-24 17:33:04.350  29344-29373/com.ebookfrenzy.TeacherClient I/System.out﹕ java.net.PlainSocketImpl$PlainSocketInputStream@3ca2929f

SkImageDecoder::Factory returned null

이런식으로 프린트를 찍어봤는데 어떤 값이 들어있는걸로 확인되고.. 이것을 그대로 비트맵 팩토리 디코드스트림에 넣었는데... null값을 반환해서 그림이 안그려지는것 같습니다. 어떻게 해야 null값을 반환하지 않고 정상적으로 받아서 그릴수 있을까요....ㅠㅠ 참고로 오고있니 라는 것이 한 300번쯤 반복됩니다.( jpg파일이 300kb정도되서 300번 반복되는것일겁니다.) 그때마다 무언가 값이 들어오고, 비트맵 팩토리는 null값을 보냅니다. 또한, 서버는 그냥 .jpg파일을 FileInputStream으로 열고 그것을 그대로 버퍼에 읽어서 1024byte단위로 보냅니다.

 

haenara 님이 2016년 10월 24일 질문
2016년 10월 24일 수정

2개의 답변

0 추천
비트맵 팩토리 내부코드까지 디버깅 해보시구요. 비트맵은 사이즈가 크기 때문에  사이즈를 줄이는 scaling코드를 작성하셔야 합니다. 안하실 경우 금방 메모리가 차서 앱이 죽는 경우도 생깁니다.
spark (227,830 포인트) 님이 2016년 10월 24일 답변
0 추천
BitmapFactory의 decodeStream같은 경우에는 버퍼를 생성해서 while로 반복하지 않아도 됩니다
While 바깥에서 버퍼 생성 없이. decodeStream을 호출해보세요.
minor (13,710 포인트) 님이 2016년 10월 25일 답변
...