Preferencias compartidas de Android TinyDB putListObject frunction
Estoy tratando de guardar una lista de objetos en las preferencias compartidas usando la función putListObject de putListObject
, pero estoy recibiendo un error de Wrong 2nd argument type
incorrecto. Puedo usar la función putObject
bien, el error sólo aparece cuando uso la función putListObject
.
Clase del Jugador:
- No se pueden agregar datos al mapa hash declarado dentro de una clase que no sea de actividad
- Java REST cliente API para Android
- Pruebas con Dagger 2 usando configuraciones de componentes independientes en Android
- ¿Debo hacer `Thread.currentThread (). Interrupt ()` before `throw new InterruptedIOException ()`?
- ¿Cuál es el propósito de un patrón de delegación?
public class Player { private String name = ""; private int score = 0; public Player(String name, int score) { this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
PutListObject función:
public void putListObject(String key, ArrayList<Object> objArray){ checkForNullKey(key); Gson gson = new Gson(); ArrayList<String> objStrings = new ArrayList<String>(); for(Object obj : objArray){ objStrings.add(gson.toJson(obj)); } putListString(key, objStrings); }
Cómo usé la función:
ArrayList<Player> playerList = new ArrayList<Player>(); TinyDB tinydb = new TinyDB(this); tinydb.putListObject("players", playerList);
El error que tuve:
PutListObject (String java.util.ArrayList <java.lang.Object>) en TinyDB no se puede aplicar a (String java.util.ArrayList <com.example.package.Player>)
¡La ayuda sería muy apreciada!
- ¿Por qué mi teléfono vibra indefinidamente?
- Android: ¿Cómo puedo hacer que mi aplicación sea multilingüe?
- Eclipse, Eliminar / corregir fácilmente @Override debido al cambio de versión de Java
- Agregue el módulo existente bajo control de fuente de Subversion en IntelliJ IDEA
- País, estado y ciudad spinner no funciona correctamente
- Cómo nombrar getter / setter en el proyecto Android
- Android - fuera de error de memoria -Modificador de cadena agrandar buffer
- PreferenceFragment es compatible con todos los problemas de API
Aunque cualquier instancia de Player
es un Object
, una ArrayList
de Players no es la misma que una ArrayList
de Objects. Cambie su firma de método a:
putListObject(String key, ArrayList<Player> objArray)
Y para el bucle a:
for(Player player : objArray){ objStrings.add(gson.toJson(player)); }
Kcochibili Desarrollador de TinyDB respondió esto en github. Él dice, usted debe lanzar sus objetos de encargo al objeto antes de lanzar putListObject.
Un ejemplo para poner Custom Object ArrayList:
ArrayList<Player> players = new ArrayList<Player>(); ArrayList<Object> playerObjects = new ArrayList<Object>(); for(Player a : players){ playerObjects.add((Object)a); } TinyDB tinydb = new TinyDB(this); tinydb.putListObject("players", playerObjects);
También cuando quiera obtener valores de DB, dará ArrayList <Object>. Por lo tanto, puede que desee volver a emitirlos a su objeto personalizado.
Una muestra para esto:
TinyDB tinydb = new TinyDB(this); ArrayList<Object> playerObjects = tinydb.getListObject("players", Player.class); ArrayList<Player> players = new ArrayList<Player>(); for(Object objs : playerObjects){ players.add((Player)objs); }
Puede utilizar todos los objetos personalizados mediante casting. La otra manera que prefiero es, agregando métodos get y put para todos los objetos personalizados a la clase TinyDB. Por ejemplo :
public void putListPlayer(String key, ArrayList<Player> playerList){ checkForNullKey(key); Gson gson = new Gson(); ArrayList<String> objStrings = new ArrayList<String>(); for(Player player: playerList){ objStrings.add(gson.toJson(player)); } putListString(key, objStrings); } //No need Class<?> mClass parameter. Because we know it is Player! public ArrayList<Player> getListPlayer(String key){ Gson gson = new Gson(); ArrayList<String> objStrings = getListString(key); ArrayList<Player> playerList = new ArrayList<Player>(); for(String jObjString : objStrings){ Player player = gson.fromJson(jObjString, Player.class); playerList.add(value); } return playerList; }
- Múltiples proyectos dependientes de androide en eclipse
- ¿Qué pasa con este hilo que se puede ejecutar al final una vez que se ha completado?