Я делаю проект, в котором мне нужно читать и записывать данные с / на лист Google с помощью сценариев Google. До сих пор мне удалось получить данные с листа, но я не знаю, как написать их с помощью Retrofit (но я сделал это с залпом).
Сценарий Google выглядит следующим образом:
function doPost(request) {
var jsonPost = JSON.parse(request.postData.contents);
var spreadsheetId = jsonPost.spreadsheetId;
var sheetname = jsonPost.sheet;
var row = jsonPost.row;
var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetname);
sheet.appendRow(row);
return ContentService.createTextOutput(JSON.stringify({sheet:sheetname, row: row}));
}
Итак, я должен отправить JSON в форме:
{"spreadsheetId":id, "sheet":sheet, "row":[[id, name, species]]}
Функция, вызываемая моим приложением:
fun appendRow(property: DatabaseProperty) {
DatabaseApi.retrofitService.appendRow(listOf(property)).enqueue(object : Callback<DatabasePostProperty> {
override fun onFailure(call: Call<DatabasePostProperty>, t: Throwable) {
toastText = "Failed: ${t.message}"
}
override fun onResponse(
call: Call<DatabasePostProperty>,
response: Response<DatabasePostProperty>
) {
toastText = "Success: ${response.body()}"
}
})
}
где DatabaseProperty:
@Parcelize
data class DatabaseProperty(
val id: String,
val name: String,
val species: String
): Parcelable
Наконец, в моем интерфейсе Retrofit у меня есть:
@POST("myscriptId")
fun appendRow(
@Field("row") propertyList: List<DatabaseProperty>,
@Field("sheet") sheet: String = SHEET,
@Field("spreadsheetId") spreadsheetId: String = SPREADSHEET_ID
):
Call<DatabasePostProperty>
где DatabasePostProperty:
data class DatabasePostProperty(
val row: List<DatabaseProperty>,
val spreadsheetId: String,
val sheet: String
)
Но все это не работает и выдает: Use JsonReader.... to accept malformed JSON
Я понятия не имею, как сделать эту работу, я только учусь Android, и я действительно не понимаю документацию
Спасибо