2017-11-21 3 views
1

Ich habe eine PHP-Datei auf einem Server, und ich muss die Informationen abrufen, aber ich weiß nicht, wie Sie einen Parameter an die Abfrage übergeben.wie Informationen mit Volley-Bibliothek in Kotlin holen

Zum Beispiel, wenn ich diese Abfrage: SELECT * FROM accountable WHERE IDAccount = 1, ich möchte diese 1 als Parameter übergeben, wie kann ich tun?

val stringRequest = StringRequest(Request.Method.POST, URL, Response.Listener<String>{ s -> 
     try { 

       val array = JSONArray(s) 

       for (i in 0..array.length() - 1) { 
        val objectAccount = array.getJSONObject(i) 
        val account = Account(
          objectAccount.getString("accountplace"), 
          objectAccount.getString("useraccount"), 
          objectAccount.getString("accountpass")) 

        listAccounts.add(account) 

       } 


     }catch (e: JSONException){ 
      e.printStackTrace() 
     } 
    }, Response.ErrorListener { error: VolleyError? -> Log.e("error", "error") }) 

    val requesQueue = Volley.newRequestQueue(this) 
    requesQueue.add<String>(stringRequest) 

Antwort

3

Sie benötigen die getParams() Methode auf Ihrem Request außer Kraft zu setzen. Um dies zu tun, können Sie entweder die Unterklasse StringRequest erstellen oder eine object expression (ähnlich einer anonymous inner class von Java) erstellen; Wie nachfolgend dargestellt.

val stringRequest = object : StringRequest(Request.Method.POST, URL, Response.Listener { s -> 
    // Your success code here 
}, Response.ErrorListener { e -> 
    // Your error code here 
}) { 
    override fun getParams(): Map<String, String> = mapOf("idaccount" to "1") 
} 
+1

Vielen Dank! Es funktionierte! Können Sie mir erklären, warum Sie Objekt schreiben müssen: StringRequest? Denn ohne dies könnte ich die Methode getParams nicht überschreiben – zasaz

+0

@zasaz Das ist die Syntax für einen Objektausdruck (der, wie ich oben erwähnt habe, der Ersatz für anonyme Java-Deklaration ist); es ist die einzige Möglichkeit, ein Objekt einer anonymen Klasse in Kotlin zu erstellen. Was * wieso * die Sprachdesigner gingen mit dieser spezifischen Syntax keine Ahnung. – Bryan

+0

@Bryan Wie fügen Sie 'stringRequest' zu queque hinzu? 'queque.add (stringRequest)' verursacht einen Fehler 'Erwartet einen Klassenkörper' – AlexAndro