2014-04-29 10 views
0

이 질문을 많이 알게되었지만 나에게 도움이되는 해결책을 찾을 수 없습니다. 내 웹 페이지에서 아바타를 다운로드하고 내부 저장소에 저장합니다. 내 활동에BitmapFactory.decodeStream이 null을 반환합니다.

:

  // check if user has an custom avatar 
      if (!bet.getUser().getAvatar().isEmpty()) { 
       // now check if we already downloaded the avatar 
       InputStream fis = AvatarHandler.getAvatar(getApplicationContext(), bet.getUser().getID()); 
       if (fis != null) { 
        Bitmap bmp = BitmapFactory.decodeStream(fis); 
        System.out.println(bmp); // is always null 
        avatarView.setImageBitmap(bmp); 
       } 
       else { 
        // if not, download it 
        System.out.println(bet.getUser().getAvatar()); 
        downloadAvatar(bet.getUser().getAvatar()); 
       } 
      } 
      else { 
       // set default avatar 
       avatarView.setImageResource(R.drawable.avatar);   
      } 


private void downloadAvatar(String url) { 
    AsyncHttpClient client = new AsyncHttpClient(); 
    client.get(url, new BinaryHttpResponseHandler() { 
     @Override 
     public void onSuccess(byte[] fileData) { 
      // save avatar on internal storageasd 
      AvatarHandler.saveAvatar(getApplicationContext(), fileData, bet.getUser().getID()); 

      // display avatar 
      Bitmap bmp = BitmapFactory.decodeByteArray(fileData, 0, fileData.length); 
      avatarView.setImageBitmap(bmp); 
     } 
    });  
} 

당신은() 모든 추가 코드를 제거하고 단지 FIS를 반환 openFileInput와 FIS를 만들 try 블록에서 내 AvatarHandler 클래스

public class AvatarHandler { 
    private static String fileName = "avatar-"; 

    /** 
    * Returns the InputStream of the avatar of the given userID. null is returned if no avatar is stored. 
    * @param userID 
    * @return string 
    */ 
    public static InputStream getAvatar(Context context, int userID) { 
     try { 
      FileInputStream fis = context.openFileInput(fileName + String.valueOf(userID)); 
      InputStreamReader isr = new InputStreamReader(fis); 
      BufferedReader bufferedReader = new BufferedReader(isr); 

      StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       sb.append(line); 
      } 

      InputStream stream = new ByteArrayInputStream(sb.toString().getBytes("UTF-8")); 

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

     } 

     return null; 
    } 

    /** 
    * Stores the given avatar on internal storage. 
    * @param context 
    * @param data 
    * @param userID 
    */ 
    public static void saveAvatar(Context context, byte[] data, int userID) { 
     try { 
      FileOutputStream fos = context.openFileOutput(fileName + String.valueOf(userID), Context.MODE_PRIVATE); 
      fos.write(data); 
      fos.close(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    } 

답변

1

;

+0

나는 정말로 이것을 전에 시도했다고 생각했습니다 ... nvm, 이제 작동합니다. 감사! – Chris

관련 문제