Передача переменной в интерфейс - PullRequest
0 голосов
/ 09 мая 2019

Пытаюсь передать идентификатор устройства в интерфейс, а я никуда не попадаю. По сути, я хочу сохранить идентификатор устройства в переменной и поместить его в @Get для интерфейса.

Я пытался использовать @Path, но я недостаточно знаком с ним, чтобы использовать его.

URL должен выглядеть так при вызове

http://xxx.xx.xxx.xxx/apps/api/109/devices/65?access_token=xxxxxx

Интерфейс

interface DeviceDetailsAPIClient {

    @GET("devices/<item id here>")
    fun getDevicesDetailsAsync(@Query("access_token") access_token: String): Deferred<Response<DeviceDetails>>
}

MainActivity2, где идентификатор передается на

class MainActivity2 : AppCompatActivity() {
    private val tag : String = MainActivity2::class.java.simpleName
    var deviceID: String = intent.getStringExtra("deviceID")
    private lateinit var adapterDetails: DeviceDetailsAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        rv_devices.layoutManager = LinearLayoutManager(this)
        rv_devices.hasFixedSize()
        adapterDetails = DeviceDetailsAdapter(listOf()) { deviceDetails: DeviceDetails -> deviceDetails }
        rv_devices.adapter = adapterDetails
        loadDeviceDetails()
    }

        private fun loadDeviceDetails() {
            GlobalScope.launch(Dispatchers.Main) {
                try {
                    val webResponseDetails = deviceDetailsApi.getDevicesDetailsAsync(access_token = "xxxxxx").await()
                    if (webResponseDetails.isSuccessful) {
                        val deviceDetails: DeviceDetails? = webResponseDetails.body()
                        Log.d(tag, deviceDetails?.toString())
                        //adapterDetails.deviceDetails = deviceDetails ?: listOf()
                        adapterDetails.notifyDataSetChanged()
                    } else {
                        Log.e(tag, "Error ${webResponseDetails.code()}")
                        Toast.makeText(this@MainActivity2, "Error ${webResponseDetails.code()}", Toast.LENGTH_LONG).show()
                    }
                } catch (e: IOException) {
                    Log.e(tag, "Exception " + e.printStackTrace())
                    Toast.makeText(this@MainActivity2, "Exception ${e.message}", Toast.LENGTH_LONG).show()
                }
            }
        }
    }

Это переменная, в которой я храню идентификатор в

var deviceID: String = intent.getStringExtra("deviceID")

Теперь, как мне передать это интерфейсу?

1 Ответ

0 голосов
/ 09 мая 2019

Аннотация @Path может использоваться для изменения URL:

interface DeviceDetailsAPIClient {

    @GET("devices/{deviceId}")
    fun getDevicesDetailsAsync(
        @Path("deviceId") deviceId: Long,
        @Query("access_token") access_token: String
    ): Deferred<Response<DeviceDetails>>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...