Комментарии 5
Спасибо
Получалось так распарсить больше 100 строк?
Где описывается класс ResponseBody ?
AS предложила импортировать okhttp3.ResponseBody, но при выполнении выдает ошибку:java.lang.IllegalArgumentException: Unable to create call adapter for class okhttp3.ResponseBody
import com.google.gson.GsonBuilder
import com.google.gson.annotations.SerializedName
import okhttp3.ResponseBody
import retrofit2.Retrofit
import retrofit2.http.GET
data class ResponseWrapper(
@SerializedName("version") val version: String,
@SerializedName("reqId") val reqId: String,
@SerializedName("status") val status: String,
@SerializedName("sig") val sig: String,
@SerializedName("table") val table: Table
)
data class Table(
@SerializedName("cols") val cols: List<Column>,
@SerializedName("rows") val rows: List<Row>,
@SerializedName("parsedNumHeaders") val parsedNumHeaders: Int
)
data class Column(
@SerializedName("id") val id: String,
@SerializedName("label") val label: String,
@SerializedName("type") val type: String
)
data class Row(
@SerializedName("c") val cells: List<Cell?>
)
data class Cell(
@SerializedName("v") val value: String
)
interface GSheetsService {
@GET("gviz/tq?tqx=out:json")
suspend fun getSheetData(): ResponseBody
}
fun String.dataToJsonString(): String =
substringAfter("Query.setResponse(").let {
it.substring(0, it.lastIndex - 1)
}
fun String.getResponseFromJson(): ResponseWrapper =
GsonBuilder().setLenient().create()
.fromJson(this, ResponseWrapper::class.java)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val gSService = Retrofit.Builder()
.baseUrl(
"https://docs.google.com/spreadsheets/d/<ID документа>/"
).build().create(GSheetsService::class.java)
lifecycleScope.launch(Dispatchers.IO) {
val response = gSService.getSheetData().string().dataToJsonString().getResponseFromJson()
Log.d("response", "$response")
}
}
Ну и конечно же, я не говорю про разрешение на использование интернета)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Парсим данные из Google Sheets с помощью Kotlin и Retrofit в Android