Использование Gson с интерфейсами для получения данных из API - PullRequest
0 голосов
/ 17 апреля 2020

У меня нет опыта работы с Kotlin, и я пытаюсь написать приложение, извлекающее данные из различных финансовых API, используя Gson. Я создал два класса, реализующих интерфейс, и я хотел бы создать его экземпляр в функции generi c. Прямо сейчас у меня есть два различных метода для работы с каждым API, и я хотел бы сделать его более приличным.

РЕДАКТИРОВАТЬ:

Я хочу сделать обобщенную c функцию из двух заданных функций:

Интерфейс и два класса:

interface TickerEntity{

  val tickers: Array<String>

  data class MainData (
    val Bid: Double,
    val Ask: Double
  )

}

object API1TickerEntity : TickerEntity {

  val tickers = arrayOf<String>("BTC-LTC", "BTC-DOGE", "BTC-POT", "BTC-USD")

  data class MainData(
    val success: Boolean,
    val message: String,
    val result: ResultData
  )

  data class ResultData (
    val Bid: Double,
    val Ask: Double,
    val Last: Double
  )

}

object API2TickerEntity : TickerEntity {

  val tickers = arrayOf<String>("LTCBTC", "BTCDOGE", "BTCPOT", "BTCUSD")

  data class MainData(
    val max : Double,
    val min : Double,
    val last : Double,
    val bid : Double,
    val ask : Double,
    val vwap : Double,
    val average : Double,
    val volume : Double
  )

}

Мои функции для управления Json Я хочу быть обобщенным c:

data class BuySell( val stockName: String, val buy: Double = 0.0, val sell: Double = 0.0)

    fun getAPI1BuySell(): () -> BuySell {
    val currency = API1TickerEntity.tickers[0]
    val response = sendRequest("somesite.com")
    val gson = Gson()
    val ticker: API1Entity.MainData = gson.fromJson(response.body, API1TickerEntity.MainData::class.java)
    println(currency)
    return { BuySell("API1", ticker.result.Ask, ticker.result.Bid) }
  }

  fun getAPI2BuySell(): () -> BuySell {
    val currency = API2TickerEntity.tickers[0]
    val response = sendRequest("someothersite.com")
    val gson = Gson()
    val ticker: API2TickerEntity.MainData = gson.fromJson(response.body, API2TickerEntity.MainData::class.java)
    return { BuySell("API2", ticker.ask, ticker.bid) }

  }

До сих пор я пытался:

  fun <T : TickerEntity> getStockBuySell(url: String, stockName: String): () -> BuySell {

    val tickerEntity : T = T
    val currency = tickerEntity.tickers[0]
    val response = sendRequest(url.replace("{}", currency))
    val gson = Gson()
    val ticker: tickerEntity.MainData = gson.fromJson(response.body, tickerEntity.MainData::class.java)
    println(currency)
    return { BuySell (stockName, ticker.Ask, ticker.Bid) }
  }
}

Но я не могу создать экземпляр интерфейса в одиночку, а также, кажется, я не могу переопределить один класс данных, поскольку он не является значением.

JSON файлов для управления:

API1:

 {"success":true,"message":"","result":{"Bid":0.00596655,"Ask":0.00597554,"Last":0.00597933}}

API2:

{"max":0.00606939,"min":0.0059345,"last":0.00595134,"bid":0.00594972,"ask":0.00599205,"vwap":0.00595134,"average":0.00595134,"volume":29.60407718}

Вся помощь приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...