Сериализация ArrayList пользователей, содержащих растровые изображения - PullRequest
0 голосов
/ 26 октября 2011

Мне нужно реализовать вход в систему, которая ведет историю зарегистрированных пользователей. У каждого пользователя также есть изображение (растровое изображение), прикрепленное к нему. Когда пользователь успешно входит в систему, мне нужно обновить историю пользователей, сохраненную в локальном хранилище.

Из-за растрового изображения я не могу сериализовать массив, содержащий пользователей.

Вот код класса пользователя:

public class User implements Serializable
{
private String username;
private String systemUserID;
private Date loginDate;
private Bitmap image;

Как я могу реализовать сериализацию arraylist, чтобы иметь возможность хранить arraylist пользователей? Я пронесся через Интернет и нашел подсказку, преобразующую растровое изображение в байтовый массив.

Как это работает?

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 27 октября 2011

Я не реализовал этот конкретный тип логики, но вот примерно то, что вам нужно сделать.

  1. Прочитайте некоторые документы по сериализации. Например, это .
  2. Добавьте методы writeObject( )/readObject( ) к вашему User классу.
  3. Внутри этих методов используйте copyPixelsToBuffer и copyPixelsFromBuffer для сохранения в / чтения из NIO Буфер .
  4. Передача данных по мере необходимости между Buffer и вашим потоком вывода / ввода.
0 голосов
/ 27 октября 2011

Если растровое изображение не сериализуемо, вы должны пометить его как временное и предоставить собственную настраиваемую сериализацию для него (реализовать readObject и writeObject), например записать его содержимое в виде двоичных данных (или более сложных).

Вы можете понять противоположное направление.Имейте в виду, что (настраиваемая) сериализация происходит в порядке FIFO, что означает, что вы должны читать данные в том же порядке, в котором вы их записали.

0 голосов
/ 27 октября 2011

Перед использованием интерфейса Serializable вы всегда должны сделать гигантскую паузу. Использование этого имеет огромный потенциал, чтобы вернуться и укусить вас в задницу. Но я отвлекся. Растровые изображения не сериализуемы, так что вам не повезло, насколько это возможно. Тем не менее, есть еще хорошее решение вашей проблемы. Вместо того, чтобы сериализовать каждый объект User, вы просто отслеживаете все в базе данных SQLite . А что касается растрового изображения, просто сохраните его на SDCard и в базе данных сохраните путь к файлу. Базы данных SQLite - это, как правило, постоянное хранилище в Android.

...