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();
}
}
}
나는 정말로 이것을 전에 시도했다고 생각했습니다 ... nvm, 이제 작동합니다. 감사! – Chris