2015-11-09 1 views
0

У меня есть объект с полем BitmapDrawable, который я хотел бы сериализовать. я реализовал пользовательские сериализации/десериализации со следующими методами:Пользовательский сериализационный пользовательский доступ к контексту

private void writeObject(ObjectOutputStream out) throws IOException { 
    out.defaultWriteObject(); 
    art.getBitmap().compress(Bitmap.CompressFormat.WEBP, 100, out); 
} 

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { 
    in.defaultReadObject(); 
    art = new BitmapDrawable(BitmapFactory.decodeStream(in)); 
} 

Это работает, за исключением того, что BitmapDrawable конструктор без ресурсов является устаревшим, и я хотел бы использовать предпочтительный конструктор. Что такое хороший способ получить контекст Android, переданный в readObject?

+0

Использует ли ваш класс объектов 'Context' для чего-нибудь еще? Вы передаете его один в своем конструкторе? –

+0

Нет, но если я передал его только для этого, потому что мне это нужно в методе readObject, я предполагаю, что не хочу сериализовать контексты, поэтому в readObject у меня не будет доступа к нему, правильно? – Nick

+1

Справа, справа. Вы не можете сериализовать 'Context', даже если хотите. Возможно, вам придется изменить свой класс, чтобы сохранить только «битмап», и создать «BitmapDrawable» по мере необходимости. В противном случае вы можете просто застрять с устаревшим конструктором. –

ответ

0

Процитируем ответ Майка М из комментариев выше, чтобы этот вопрос можно было закрыть.

Возможно, вам придется изменить свой класс, удерживая только растровое изображение, и при необходимости создать BitmapDrawable.

В основном вместо того, чтобы превращать Bitmap в BitmapDrawable в классе, я делаю это в тех случаях, когда мне нужен Drawable (потому что у меня есть доступ к контексту в этих местах). Поэтому вместо сериализации BitmapDrawable я сериализую Bitmap, который не требует контекста для десериализации.

 Смежные вопросы

  • Нет связанных вопросов^_^