簡體   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