从谷歌Sheet到Android的JSON给出了垃圾信息。

问题描述 投票:0回答:1

我正在从google sheet中获取一个数据列表到我的android应用中。谷歌脚本正常运行,测试运行也提供了正确的输出。然而,在android应用中接收到的JSON数据看起来像垃圾。这是我的android端代码。我使用的是Volley。

private fun getList() {
    val stringRequest = StringRequest(
        Request.Method.GET, "https://docs.google.com/spreadsheets/d/***********/edit#gid=0",
        Response.Listener<String> { response ->
            Log.d("MyMessage", response)
            parseItems(response)
        },
        Response.ErrorListener { responseEr -> }
    )
    val socketTimeOut = 500000
    val policy = DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)
    stringRequest.retryPolicy = policy
    val queue = Volley.newRequestQueue(this)
    queue.add(stringRequest)
}

google的appscript如下

function doGet(e){

  var action = e.parameter.action;
  if(action == 'getList'){
    return getList(e);
  }
}

function getList(e){

  var records={};

  var sheet = ss.getSheetByName('*****');
  var rows = sheet.getDataRange().getValues();
  data = [];

  for (var r = 1; r < 10; r++) {
     record = rows[r][1];
     data.push(record);
  }

  records.items = data;
  var result=JSON.stringify(records);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);

 }

当我用提供的链接测试appCode脚本时,我得到了正确的列表:

{"items":["****","****","****",........,"*****"]}

但是android应用的响应日志提供了以下输出。

< !DOCTYPE html> ......< meta name="viewport" ................................................................................................................................................................................................................ .ritz .waffle a { color: inherit; }.ritz .waffle .s2{border-left: none;border-right: none;backgroun ......tom;white-space:nowrap;directory:ltr;padding"

我在这里做错了什么?

android kotlin google-apps-script android-volley
1个回答
1
投票

这返回。

["COL2",10,11,3,3,2,1,7,11,5,9,3,10]

从这张表的数据。

COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10,COL11,COL12
7,10,8,0,0,1,3,11,2,10,9,7
11,11,6,0,1,2,11,7,6,4,1,6
7,3,6,0,6,4,6,1,1,7,8,1
9,3,1,2,11,1,2,10,11,8,1,0
1,2,9,5,11,4,11,9,3,10,0,11
7,1,0,3,8,10,3,4,11,3,1,1
10,7,9,11,11,5,1,5,0,6,11,9
5,11,3,5,3,5,3,7,3,6,9,6
4,5,1,6,7,3,8,3,2,4,3,10
11,9,11,11,6,8,3,0,3,5,9,11
5,3,9,10,9,8,10,5,1,11,9,0
6,10,0,8,10,5,2,2,6,4,5,6

还有这个网址:

https://script.google.com/a/............/exec?action=getlist

和这个gs代码:

function doGet(e){
  if(e.parameter && e.parameter.action=='getlist') {
    return getList();
  }
}

function getList(){
  var ss=SpreadsheetApp.openById('Spreasheet Id')
  var sh=ss.getSheetByName('Sheet Name');
  var vA=sh.getRange(1,2,sh.getLastRow(),1).getValues().map(function(r,i){return r[0]});
  return ContentService.createTextOutput(JSON.stringify(vA));
}

0
投票

安卓应用的权限不足,无法访问Apps脚本网页应用,并被重定向到谷歌的登录页面。一些解决方案包括

  • 减少Web应用程序的访问权限为 "任何人,甚至是匿名的 "或
  • 通过注册谷歌和oauth增加安卓应用的权限。1
  • 或者,使用 2
© www.soinside.com 2019 - 2024. All rights reserved.