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:

 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!

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; } 
  • Cómo hacer un TextView en negrita?
  • Botón de Android onClickListener
  • Submenú del menú del cajón de navegación
  • Gson deserializando objetos anidados con InstanceCreator
  • Android NDK tutorial / guía para principiantes.
  • Servicio Android android.os.BinderProxy error
  • Cambiar los idiomas de la aplicación a través de strings.xml
  • Decodificación de caracteres especiales HTML
  • Guardar los datos de acceso (preferencias) android
  • La selección de al menos un botón de radio se selecciona de cada grupo de radio en android?
  • Las transacciones en la base de datos no funcionan en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.