Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
219 / 219 / 22
Регистрация: 19.01.2013
Сообщений: 1,644
Записей в блоге: 3
#1

SharedPreferences Save List<myClass> - Программирование Android

21.08.2015, 15:16. Просмотров 383. Ответов 6
Метки нет (Все метки)

Ребята, помогите с кодом

Как мне сохранить List<MyClass>, с помощью SharedPreferences ?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static class MyClass
    {
        public int ID;
        public String Name;
        public String Key;
 
        public ChatC(){
            super();
        }
 
        public ChatC(int id, String _Name, String _Key) {
            super();
            this.ID = id;
            this.Name = _Name;
            this.Key = _Key;
        }
 
 
        @Override
        public String toString() {
            return this.Name;
        }
 
    }
попытался так .. (Возможно ObjectSerializer неправильный?)
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
private boolean SavechatList(PublicClasses.ChatC chat) {
 
                try
                {
                GlobalClasses = ((GlobalClass) GlobalClass.GetMyApplication());
                SharedPreferences.Editor editor = null;
                ArrayList ArrayList;
                ArrayList = (ArrayList) ObjectSerializer.deserialize(mSettings.getString(GlobalClasses.LisK, ObjectSerializer.serialize(new ArrayList())));
 
                editor = mSettings.edit();
                editor.putString(GlobalClasses.LisK, ObjectSerializer.serialize(ArrayList));
                editor.commit();
 
 
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
 
 
            return true;
        }
 
 
 
package su.el_teh.cryptomessenger.Other;
 
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
 
/**
 * Created by skull on 21.08.2015.
 */
public class ObjectSerializer {
 
    public static String serialize(Serializable obj) throws IOException {
        if (obj == null) return "";
        try {
            ByteArrayOutputStream serialObj = new ByteArrayOutputStream();
            ObjectOutputStream objStream = new ObjectOutputStream(serialObj);
            objStream.writeObject(obj);
            objStream.close();
            return encodeBytes(serialObj.toByteArray());
        } catch (Exception e) {
            throw new IOException();
        }
    }
 
    public static Object deserialize(String str) throws IOException {
        if (str == null || str.length() == 0) return null;
        try {
            ByteArrayInputStream serialObj = new ByteArrayInputStream(decodeBytes(str));
            ObjectInputStream objStream = new ObjectInputStream(serialObj);
            return objStream.readObject();
        } catch (Exception e) {
            throw new IOException();
        }
    }
 
    public static String encodeBytes(byte[] bytes) {
        StringBuffer strBuf = new StringBuffer();
 
        for (int i = 0; i < bytes.length; i++) {
            strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));
            strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
        }
 
        return strBuf.toString();
    }
 
    public static byte[] decodeBytes(String str) {
        byte[] bytes = new byte[str.length() / 2];
        for (int i = 0; i < str.length(); i+=2) {
            char c = str.charAt(i);
            bytes[i/2] = (byte) ((c - 'a') << 4);
            c = str.charAt(i+1);
            bytes[i/2] += (c - 'a');
        }
        return bytes;
    }
 
}



Потом так вызывать

ArrayList = (ArrayList) ObjectSerializer.deserialize(mSettings.getString(GlobalClasses.LisK, ObjectSerializer.serialize(new ArrayList())));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2015, 15:16     SharedPreferences Save List<myClass>
Посмотрите здесь:

SharedPreferences - Программирование Android
выручайте, в чем ошибка? выводит 94 и 95, а должно 84 и 85 public class MainActivity extends Activity { Intent intent; ...

SharedPreferences - Программирование Android
Всем привет, вопрос: Как через SharedPreferences сохранять &quot;String текст&quot;, я многое перепробовал но вылет... Вылет... Не могли бы...

SharedPreferences - Программирование Android
String PR = &quot;key&quot;; SharedPreferences mySharedPreferences = getSharedPreferences(PR, Activity.MODE_PRIVATE); String...

SharedPreferences - Программирование Android
Доброй ночи. Вышла заминка с бд класса SharedPreferences. Вообщем вот код: import android.app.Activity; import...

Сохранение в SharedPreferences - Программирование Android
Вобщем, я хочу сделать так, чтобы при нажатии на кнопку создавалась на экране ещё одна кнопка(и так можно сделать неограниченное количество...

Array в SharedPreferences - Программирование Android
Добрый вечер! Вопрос заключается в том, можно ли сохранить настройки приложения с помощью SharededPreferences в виде массива? Нужно...

Записать объект в SharedPreferences - Программирование Android
Здравствуйте, всем. В приложении реализован свой класс сбора статистики. Есть ли какой-то простой способ сериализовать или...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1566 / 1308 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.08.2015, 15:27     SharedPreferences Save List<myClass> #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ILNAR_93, через JSON можно

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public class MyClass {
 
    private int id;
    private String name;
    private String key;
 
    public MyClass() {
    }
 
    public MyClass(int id, String name, String key) {
        this.id = id;
        this.name = name;
        this.key = key;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getKey() {
        return key;
    }
 
    public void setKey(String key) {
        this.key = key;
    }
 
    @Override
    public boolean equals(Object o) {
 
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
 
        MyClass myClass = (MyClass) o;
 
        if (id != myClass.id) return false;
        if (name != null ? !name.equals(myClass.name) : myClass.name != null) return false;
        if (key != null ? !key.equals(myClass.key) : myClass.key != null) return false;
 
        return true;
    }
 
    @Override
    public int hashCode() {
        int result = id;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + (key != null ? key.hashCode() : 0);
        return result;
    }
 
    public String serialize() {
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("id", id);
            jsonObject.put("name", name);
            jsonObject.put("key", key);
        } catch (JSONException e) {
            return null;
        }
        return jsonObject.toString();
    }
 
    public static MyClass create(JSONObject pipeline) {
        MyClass myClass = new MyClass();
        try {
            myClass.id = pipeline.getInt("id");
            myClass.name = pipeline.getString("name");
            myClass.key = pipeline.getString("key");
            return myClass;
        } catch (JSONException e) {
            return null;
        }
    }
}
и

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class MyClassSerializationUtils {
 
    public static String serialize(List<MyClass> myClasses) {
        JSONArray jsonArray = new JSONArray();
        try {
            for (MyClass myClass : myClasses) {
                jsonArray.put(myClass.serialize());
            }
        } catch (Exception e) {
            return "";
        }
        return jsonArray.toString();
    }
 
    public static List<MyClass> deserialize(String pipeline) {
        List<MyClass> myClasses = new ArrayList<>();
        if (pipeline == null || pipeline.isEmpty()) return myClasses;
        try {
            JSONArray jsonArray = new JSONArray(pipeline);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                myClasses.add(MyClass.create(jsonObject));
            }
            return myClasses;
        } catch (JSONException e) {
            return myClasses;
        }
    }
 
}
ILNAR_93
Android
219 / 219 / 22
Регистрация: 19.01.2013
Сообщений: 1,644
Записей в блоге: 3
21.08.2015, 17:11  [ТС]     SharedPreferences Save List<myClass> #3
YuraAAA,
Спасибо!

Сохранил все норм..
А вот обратно считать почему то не могу..

Java
1
 List<PublicClasses.ChatC> TempLIstChat = ObjectSerializer.deserialize(mSettings.getString(GlobalClasses.ChatLisK, ObjectSerializer.serialize(new ArrayList<PublicClasses.ChatC>())));
Добавлено через 22 минуты
08-21 17:09:54.680 30209-30345/? I/MyLogIlnar﹕ pipeline :["{\"chatName\":\"зщшнт\",\"id\":35,\"key\":\"03D972\"}"]
08-21 17:09:54.681 30209-30345/? I/MyLogIlnar﹕ pipeline ERROR:Value {"chatName":"зщшнт","id":35,"key":"03D972"} at 0 of type java.lang.String cannot be converted to JSONObject
08-21 17:09:54.682 30209-30345/? I/MyLogIlnar﹕ pipeline ERROR:org.json.JSONException: Value {"chatName":"зщшнт","id":35,"key":"03D972"} at 0 of type java.lang.String cannot be converted to JSONObject

Добавлено через 24 секунды
Это при deserialize
Pablito
2417 / 1862 / 583
Регистрация: 12.05.2014
Сообщений: 6,601
Завершенные тесты: 1
21.08.2015, 17:23     SharedPreferences Save List<myClass> #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Не получается (де)сериализации класса
можно сериализовать и обратно практически любые объекты
ILNAR_93
Android
219 / 219 / 22
Регистрация: 19.01.2013
Сообщений: 1,644
Записей в блоге: 3
24.08.2015, 09:40  [ТС]     SharedPreferences Save List<myClass> #5
Паблито,

При загрузки ошибка loadObject :Read an exception; java.io.NotSerializableException: su.pack.Other.PublicClasses$ChatC

Я правильно делаю?

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
 
public void Click(List<PublicClasses.ChatC> chat){
   Object ArObject = chat.toArray();
   new ObjectSerializer().serializeObject("Logger", ArObject, ctx); // Save
 
//Open
List<PublicClasses.ChatC> chats = (List<PublicClasses.ChatC>) new ObjectSerializer().loadObject("Logger", ctx);
 
for (int i = 0; i < chats.size(); i++) {
Log.i("MyLogIlnar", "SaveJson1 :" + chats.get(i).ChatName);
}
 
}
 
 
 
public class ObjectSerializer {
public void serializeObject(String name, Object object, Context ctx) {
        try {
            FileOutputStream fos = ctx.openFileOutput(name, Context.MODE_PRIVATE);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(object);
            os.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public Object loadObject(String name, Context ctx) {
       Object object = null;
        try {
            FileInputStream fis = ctx.openFileInput(name);
            ObjectInputStream is = new ObjectInputStream(fis);
            object = is.readObject();
            is.close();
            fis.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            Log.i("MyLogIlnar", "loadObject :" + e.getMessage().toString());
        }
        return object;
    }
 
}


Добавлено через 12 минут
Пробую так:
тож ошибка(
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
 
 List<PublicClasses.ChatC> chats = (List<PublicClasses.ChatC>) new ObjectSerializer().loadObject("Logger", ctx);
 
 public void serializeObject(String name, List<PublicClasses.ChatC> object, Context ctx) {
        try {
            FileOutputStream fos = ctx.openFileOutput(name, Context.MODE_PRIVATE);
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(object);
            os.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public List<PublicClasses.ChatC> loadObject(String name, Context ctx) {
        List<PublicClasses.ChatC> object = null;
        try {
            FileInputStream fis = ctx.openFileInput(name);
            ObjectInputStream is = new ObjectInputStream(fis);
            object = (List<PublicClasses.ChatC>) is.readObject();
            is.close();
            fis.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            Log.i("MyLogIlnar", "loadObject :" + e.getMessage().toString());
        }
        return object;
    }
Pablito
2417 / 1862 / 583
Регистрация: 12.05.2014
Сообщений: 6,601
Завершенные тесты: 1
24.08.2015, 09:47     SharedPreferences Save List<myClass> #6
сериализуемый класс должен
Java
1
implements Serializable
, просто дописать эти буквы, методы никакие переписывать не нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2015, 10:29     SharedPreferences Save List<myClass>
Еще ссылки по теме:

Сохранение картинки в SharedPreferences - Программирование Android
Здравствуйте, подскажите, если ли способ хранения небольшой картинки в SharedPreferences, например, в байтовом виде? Записать туда строку...

SharedPreferences в другом классе - Программирование Android
Здравствуйте. Вопрос такой. есть основной класс MainActivity и другой класс, пытаюсь в нем сохранить переменную string в...

SharedPreferences putString и getString - Программирование Android
Здравствуйте! Хотел спросить как можно сделать сохранения данных для строковых значений чтобы она сохранилось и передавалось в дргуое...

SharedPreferences ArrayList<String> - Программирование Android
Можно ли массив целый сохранить именно методом SharedPreferences ?

Начальное значение SharedPreferences - Программирование Android
Здравствуйте. Как задать начальное значение в SharedPreferences, чтобы потом в методах обратного вызова не создавалось оно повторно? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ILNAR_93
Android
219 / 219 / 22
Регистрация: 19.01.2013
Сообщений: 1,644
Записей в блоге: 3
24.08.2015, 10:29  [ТС]     SharedPreferences Save List<myClass> #7
Спасибо ребята!...Все работает)
Yandex
Объявления
24.08.2015, 10:29     SharedPreferences Save List<myClass>
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru