【问题标题】:JSON from Google Sheet to Android gives garbage从 Google Sheet 到 Android 的 JSON 提供垃圾
【发布时间】:2020-05-10 18:52:05
【问题描述】:

我从 google 表格中获取数据列表到我的 android 应用程序中。 Google 脚本运行正常,测试运行也提供了正确的输出。但是,在 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应用中的响应日志提供了以下输出:

....

我在这里做错了什么

【问题讨论】:

标签: android kotlin google-apps-script android-volley


【解决方案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));
}

【讨论】:

    【解决方案2】:

    Android 应用没有足够的权限访问 Apps 脚本 web-app 并被重定向到 Google 的登录页面。一些解决方案包括:

    • 将网络应用访问权限降低为“任何人,甚至是匿名”或
    • 通过注册谷歌和oauth1来增加android应用的权限
    • 或者,使用2

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多