2013-07-24 2 views
0

나는이 같은 데이터를 수신하고 스프레드 시트를 저장하는 Google 애플리케이션 스크립트를 작성 브라우저와 데이터가 실제로 저장됩니다. 그러나 Android 앱에서이를 구현하려고 시도하면 작동하지 않습니다. 나는 AsyncTask에서 HttpGetHttpPost 기술을 시도했지만 아무 것도 얻지 못했다. 다음은 HttpPost 코드입니다.HTTP 가져 오기/안드로이드에 게시 Google 애플리케이션 스크립트가 작동하지 않습니다는

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 
+0

런타임에 logcat을 게시 할 수 있다면 도움이됩니다. 온전한 체크를 위해서, 앱에 인터넷 허가권을 줬어? – roostertech

+0

나는 그것을 실제로 인터넷 허가했다. 나는 즉시 logcat을 게시 할 것이다. –

답변

1

나는 당신이 공개 및 익명으로 appscript 서비스를 게시하지 않았을 것입니다. 또한 ContentSevice를 사용해야합니다.

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를위한 그러나

+0

나는 그것을 웹 앱 공개 및 익명으로 공개했지만, ContentService는 새로운 부분이다. 나는 그것을 지금 보일 것이다. –

+0

빠른 읽기에서 서버 응답 메커니즘이 아니라 서버 수신 메커니즘입니다. 나는 단지 클라이언트 전송과 클라이언트 수신에 관심이 없다. (ContentService가 더 이상 문제를 진단하는 데 사용될 수는 있지만) –

+0

사용 후 스크립트는 실제로 응답하고 그것이 완료해야하는 논리를 완료했다! 나는 심지어 스크립트가'doGet' 메소드를 수행했기 때문에'HttpGet'에서만 작동한다는 것을 알았습니다. 고맙습니다! –

0

나는 URLHttpURLConnection.openConnection()를 사용하여 내 입력을 읽어 내 Google 애플리케이션 스크립트를 얻을 수있는 또 다른 "적은 코딩"방법을 발견 , 지그의 ContentService이 길을가는 길이었습니다. Google 스크립트의 doGet() 또는 doPost()에 반환 값을 다음과 같이 포함 시켰습니다.

return ContentService.createTextOutput('Success');