繁体   English   中英

Android上的HTTP Get / Post不适用于Google Apps脚本

[英]HTTP Get/Post on Android doesn't work with Google Apps Script

我写了一个Google Apps脚本来接收数据并将其存储在电子表格中,如下所示:

https://script.google.com/macros/s/.../exec?t1=hi&t2=foo

该URL在浏览器上运行良好,并且确实存储了数据。 但是,当我尝试从Android应用程序实现此功能时,它不起作用。 我已经在AsyncTask中尝试了HttpGetHttpPost技术,却一无所获。 这是HttpPost的代码:

class sendData extends AsyncTask<String, Void, String> {



    @Override
    protected String doInBackground(String... params) {

        String [] data = params[0].split("-");

        postData(data[0],data[1]);

    }      

    @Override
    protected void onPostExecute(String result) {    
      // Update Ui here  

    }

    public void postData(String l1, String l2) {
        // Create a new HttpClient and Post Header
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://script.google.com/macros/s/.../exec");

        try {
            // Add your data
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            nameValuePairs.add(new BasicNameValuePair("test", l1));
            nameValuePairs.add(new BasicNameValuePair("testt", l2));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            // Execute HTTP Post Request
            HttpResponse response = httpclient.execute(httppost);

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    } 

}

问题可能在哪里? 我已经将脚本和电子表格的隐私设置为任何人都可以访问和编辑,并且仍然没有响应。

这是logcat。 不知道这是否意味着:

07-25 00:17:36.400: D/dalvikvm(31262): Late-enabling CheckJNI
07-25 00:17:36.415: I/dalvikvm(31262): Turning on JNI app bug workarounds for target SDK version 10...
07-25 00:17:36.420: E/jdwp(31262): Failed sending reply to debugger: Broken pipe
07-25 00:17:36.420: D/dalvikvm(31262): Debugger has detached; object registry had 1 entries
07-25 00:17:40.930: D/dalvikvm(31262): GC_CONCURRENT freed 220K, 7% free 12377K/13191K, paused 5ms+2ms, total 28ms
07-25 00:17:42.075: D/dalvikvm(31262): GC_CONCURRENT freed 314K, 7% free 12517K/13447K, paused 9ms+3ms, total 67ms
07-25 00:17:44.850: D/dalvikvm(31262): GC_CONCURRENT freed 341K, 7% free 12630K/13575K, paused 12ms+3ms, total 34ms
07-25 00:17:59.815: D/dalvikvm(31262): GC_CONCURRENT freed 435K, 8% free 12638K/13703K, paused 2ms+2ms, total 26ms
07-25 00:18:05.000: D/dalvikvm(31262): GC_CONCURRENT freed 380K, 8% free 12693K/13703K, paused 15ms+5ms, total 54ms
07-25 00:18:15.030: D/dalvikvm(31262): GC_CONCURRENT freed 366K, 8% free 12776K/13767K, paused 19ms+2ms, total 61ms
07-25 00:18:56.390: E/SpannableStringBuilder(31262): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
07-25 00:18:56.390: E/SpannableStringBuilder(31262): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length

我敢打赌,您尚未以公开和匿名方式发布该appscript服务。 还要确保使用ContentSevice。

我发现了另一种“较少编码”的方式,可以使用URLHttpURLConnection.openConnection()来获取我的Google Apps脚本以读取我的输入:

try {
  URL url = new URL("https://script.google.com/macros/s/.../exec?t1=hi&t2=foo");
  HttpURLConnection con = (HttpURLConnection) url
    .openConnection();
  readStream(con.getInputStream());
  } catch (Exception e) {
  e.printStackTrace();
}



private void readStream(InputStream in) {
  BufferedReader reader = null;
  try {
    reader = new BufferedReader(new InputStreamReader(in));
    String line = "";
    while ((line = reader.readLine()) != null) {
      System.out.println(line);
    }
  } catch (IOException e) {
    e.printStackTrace();
  } finally {
    if (reader != null) {
      try {
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
        }
    }
  }
} 

(来源: http : //www.vogella.com/articles/AndroidNetworking/article.html

但是对于HttpGet和HttpPost,Zig的ContentService是必经之路。 我将返回值包含在Google脚本的doGet()或doPost()中,如下所示:

return ContentService.createTextOutput('Success');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM