2017-09-28 15 views
-2

Je suis nouveau à firebase, donc certaines choses sont encore un peu confus pour moi.Android populate arrayOf avec des données firebase plutôt que des chaînes

Je dispose d'un tableau: que je passe ensuite à un spinner. Tout ça fonctionne. Bien que, maintenant je veux passer au niveau suivant, qui est au lieu de peupler le spinner avec les chaînes que j'ai ajoutées au tableau, je veux qu'il transmette les données que j'ai sur ma base de données Firebase. Raison en est, certains éléments ont des sous-éléments, donc j'ai besoin d'utiliser des objets à la place. Je ne sais vraiment pas comment contourner cela et remplacer cela. Pourriez-vous m'aider s'il vous plaît

J'ai déjà mon application connectée à la base de données en temps réel.

Merci


{ 
    "KitList" : { 
    "kettle" : { 
     "10KG" : "10KG", 
     "5KG" : "5KG" 
    }, 
    "punchBag" : "punch bag", 
    "sandbag" : "sandbag" 
    } 
} 

Quelqu'un m'a dit que je ne devrais pas avoir la valeur égale à la clé?


Ceci est mon modèle

class KitList(val title: String) { 

override fun toString(): String { 
    return super.toString() 
}} 

Ceci est l'activité où la fileuse est:

class NewKitListActivity : AppCompatActivity() { 
var database = FirebaseDatabase.getInstance() 
var myRef = database.getReference("KitList") 



var spinnerArray = arrayOf("Dumbell", "Punching Bag", "Yoga Ball", "Skipping Rope") 

inner class Item { 
    var IdItem: Int = 0 
    var Item: String? = null 
    var SubItems: ArrayList<Item>? = null 
} 

var newKitList = mutableListOf<String>() 
val selectedItems: MutableList<String>? = null 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    setContentView(R.layout.activity_new_kit_list) 
    var context = this; 
    var addButton = addKitItemBtn 

    val spinner = newKitItemSpinner 
    val spinnerArrayAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, spinnerArray) 
    //selected item will look like a spinner set from XML 
    spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) 
    spinner.adapter = spinnerArrayAdapter 

    val kitList = newKistListView 
    val listViewAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, newKitList) 
    kitList.adapter = listViewAdapter 

    addButton.setOnClickListener(object : View.OnClickListener { 
     override fun onClick(v: View?) { 
      val selectedItem = spinner.selectedItem.toString() 
      newKitList.add(selectedItem) 
      listViewAdapter.notifyDataSetChanged() 
     } 
    })}} 
+0

il suffit de créer un modèle afin que les données dans votre base de données peuvent être traitées.Vous pouvez montrer quelques exemples de données avec des sous-éléments et je peux vous montrer comment. – Orvenito

+0

mise à jour post avec les données. Quelqu'un m'a dit que je ne devrais pas avoir la valeur égale à la clé? – EmanyHeather

+0

Rien dans votre code ne lit encore quelque chose de la base de données. Bien que je comprenne que vous avez du mal à écrire le code complet, il est beaucoup plus facile de vous aider si vous nous montrez jusqu'où vous êtes. De cette façon, nous pouvons le compléter et expliquer ce que vous avez manqué ou où vous avez fait une erreur, au lieu de simplement fournir le code tel que nous l'implémenterions. –

Répondre

0

J'ai complètement retiré ma réponse d'hier et le changer avec celui-ci

J'ai trouvé cette bibliothèque de cette answer

cela devrait être la meilleure façon pour l'analyse syntaxique JSON dans Kotlin maintenant.

vous pouvez trouver toutes les réponses sur le lien, mais voici quelques étapes de base:

  1. Installer

    repositories { 
    jcenter() 
    } 
    
    dependencies { 
    compile 'com.beust:klaxon:0.30' 
    } 
    
  2. Disons que vous avez cette JSON:

    [ 
    { 
        "name" : "John", 
        "age" : 20 
    }, 
    { 
        "name" : "Amy", 
        "age" : 25 
    }, 
    { 
        "name" : "Jessica", 
        "age" : 38 
    } 
    ] 
    

Nous pouvons facilement recueillir tous les âges comme suit:

val array = parse("/e.json") as JsonArray<JsonObject> 

val ages = array.long("age") 
println("Ages: $ages") 

// Prints: Ages: JsonArray(value=[20, 25, 38]) 
+0

une chance sur la façon dont je le fais à Kotlin? Ceci est mon modèle: classe KitList (titre val: String) { toString fun override(): String { super.toString retour() } } Aussi, je fais je le passe? – EmanyHeather

+0

Si vous allez poster un code, pas sur le commentaire. Modifiez votre question et ajoutez le code. Par ailleurs, si je peux éditer ma réponse aussi – Orvenito

+0

Juste édité il :) – EmanyHeather

0

Vous avez essentiellement deux options:

  1. Implémentez un SpinnerAdapter pour pouvoir transmettre vos objets Firebase et l'utiliser à la place d'un ArrayAdapter.
  2. Convertissez vos objets Firebase en chaînes et transmettez-les à l'ArrayAdapter.
+0

J'ai déjà un SpinnerAdapter – EmanyHeather

+0

Mais je ne peux pas passer l'objet, j'obtiens une erreur – EmanyHeather

+0

Vous devez sous-classer SpinnerAdapter afin qu'il puisse prendre vos objets. – k0bin