PDA

Ver la Versión Completa : [ SOLUCIONADO ] Variables con Kotlin


Merche300
30/12/17, 12:19:46
Bueno no se sera el hilo correspondiente para kotlin, pero al no ver ninguno lo pregunto aqui.
Estoy intentando completar una url por medio de variables que obtengo con este codigo:

class Detalles : AppCompatActivity() {
var actaPartidoList: ArrayList<ActaPartido>? = ArrayList()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.cabecera_detalles)

val jornada = intent.getStringExtra("jornada")
collapsing_toolbar.setTitle(jornada)

collapsing_toolbar.setExpandedTitleColor(Color.WHI TE)
collapsing_toolbar.setCollapsedTitleTextColor(Colo r.WHITE)

var idLocal = intent.getStringExtra("idLocal")
val idVisitante = intent.getStringExtra("idVisitante")
val codInfo = intent.getStringExtra("codInfo")
}

interface ApiActaPartido { @get (http://www.htcmania.com/member.php?u=21806)("server.php?action=getActa&tmp=2017/2018&jor=11&cmp=48&idl=0201113211&idv=0204061161&id=2127995"+$codInfo)
fun getActaPartido(): Call<ActaPartidoList>
}

override fun onStart() {
super.onStart()

recycler_detalles.layoutManager = GridLayoutManager(applicationContext, 1)

val apiActaPartido: ApiActaPartido= RetrofitClient().getApiActaPartido()
val call: Call<ActaPartidoList> = apiActaPartido.getActaPartido()

call.enqueue(object : Callback<ActaPartidoList> {
override fun onResponse(call: Call<ActaPartidoList>, response: Response<ActaPartidoList>) {
actaPartidoList = response.body()!!.getActaPartido()

val adapter = ActaPartidoAdapter(applicationContext, actaPartidoList!!)
recycler_detalles.adapter = adapter

//progressBar.setVisibility(View.VISIBLE)
}

override fun onFailure(call: Call<ActaPartidoList>, t: Throwable) {
Toast.makeText(applicationContext, "Detalles tiene un error de respuesta", Toast.LENGTH_LONG).show()
}
})
}
}

En el adapter

@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: ViewHolder, position: Int ) {
val calendario = calendarioList[position]

holder!!.itemView.setOnClickListener {

val intent = Intent(context, Detalles::class.java)

intent.putExtra("jornada", "Jornada: " + calendario.jornada)
intent.putExtra("idLocal", "Id Local: " + calendario.idLocal)
intent.putExtra("idVisitante", "Id Visi: " + calendario.idVisitante)
intent.putExtra("codInfo", "Cod Info: " + calendario.codInfo)
}
context.startActivity(intent)
}$codInfo esta subrrayado en rojo, el error:
Error:(91, 111) Expecting an element

Que solucion tiene este error? o dicho de otra manera, ¿Como puedo llevarlas variables para completar la url?

mocelet
30/12/17, 19:41:41
El código no se lee muy bien, debe haber algún problema de formato. No queda muy claro dónde está cada cosa.

En cualquier caso el error te lo da porque "const" en kotlin es para constantes que pueden conocerse en tiempo de compilación, es decir, no hace falta ejecutar el código para saber su valor. De ahí que se reduzca a tipos primitivos y String escritas en el código. En tu caso estás asignando el valor de una variable que solo se conoce cuando se ejecute el código y se llame al getStringExtra. Así que el const fuera. De hecho según está también te sobra el objeto Detalles si solo te interesa la variable que ya tienes en la actividad.

Por otro lado, para URLs con parámetros, el parámetro tiene que ir como parámetro de la función, no en la anotación. ¿Es retrofit, no? Mira los ejemplos donde hablan del {id} en http://square.github.io/retrofit/ Tendrás que añadir un parámetro al getActaPartido, precisamente para especificar a qué partido te refieres. Y en la anotación del get poner la URL con las llaves donde tenga que ponerse el parámetro.

Merche300
31/12/17, 10:39:09
El código no se lee muy bien, debe haber algún problema de formato. No queda muy claro dónde está cada cosa.

En cualquier caso el error te lo da porque "const" en kotlin es para constantes que pueden conocerse en tiempo de compilación, es decir, no hace falta ejecutar el código para saber su valor. De ahí que se reduzca a tipos primitivos y String escritas en el código. En tu caso estás asignando el valor de una variable que solo se conoce cuando se ejecute el código y se llame al getStringExtra. Así que el const fuera. De hecho según está también te sobra el objeto Detalles si solo te interesa la variable que ya tienes en la actividad.

Por otro lado, para URLs con parámetros, el parámetro tiene que ir como parámetro de la función, no en la anotación. ¿Es retrofit, no? Mira los ejemplos donde hablan del {id} en http://square.github.io/retrofit/ Tendrás que añadir un parámetro al getActaPartido, precisamente para especificar a qué partido te refieres. Y en la anotación del get poner la URL con las llaves donde tenga que ponerse el parámetro.

Si Retrofit. post1 editado

mocelet
31/12/17, 14:36:28
Sigues con lo mismo, no puedes poner variables en la anotación del get (que además has puesto el $codInfo fuera de las comillas, pero es lo de menos).

Las variables que afecten a la URL en retrofit tienen que ir en la función como parámetro, y en la URL del get escribir dónde hay que ponerlo con llaves. Como en el ejemplo que viene en la web para el identificador de usuario:

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);