1

Dokümanları ve klasörleri oluşturma ve silme ile çalışmak için neredeyse eksiksiz bir API aldım. Ama belgeleri güncellemeyi başaramıyorum. Gdata kullanırken çok kolaydı, ancak bu kod tüm android cihazlarda çalışması gerektiğinden, google api java istemcisini kullanmam gerekiyor. Ne olur Sadece (yeni bir belge mükemmel çalışır oluştururken, verilen içerikle) yeni bir belge oluşturmak olduğunugoogle api java istemcisi ile google docs belgesini güncelleme

public void updateTest() throws IOException { 
    InputStreamContent isContent = new InputStreamContent(); 
    isContent.inputStream = new ByteArrayInputStream("NEW CONTENT".getBytes("UTF-8")); 
    isContent.type = "text/plain"; 

    HttpRequest request = transport.buildPostRequest(); 
    request.setUrl("https://docs.google.com/feeds/default/media/document:0A[snip]3Y"); 

    request.content = isContent; 

    // request.headers.set("If-Match", "*"); 

    try { 
     request.execute().parseAs(DocumentListEntry.class); 
    } catch (HttpResponseException e) { 
     if (Constant.DEBUG) Log.d(TAG, "error: " + e.response.parseAsString()); 
     throw e; 
    } catch (ClientProtocolException e) { 
     if (Constant.DEBUG) Log.d(TAG, "error: " + e.getMessage()); 
     throw e; 
    } 
} 

: İşte güncelleştirilmesi sınamak bir yöntemdir. Ben eklerseniz "If-Match: *" -:

11-19 11:17:16.536: DEBUG/DocsAPI(32195): error: <errors xmlns='http://schemas.google.com/g/2005'> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): <error> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): <domain>GData</domain> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): <code>noPostConcurrency</code> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): <internalReason>POST method does not support concurrency</internalReason> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): </error> 
11-19 11:17:16.536: DEBUG/DocsAPI(32195): </errors> 
11-19 11:17:16.536: WARN/System.err(32195): com.google.api.client.http.HttpResponseException: 501 Not Implemented 
11-19 11:17:16.540: WARN/System.err(32195):  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:209) 
... 

cevap

3

komutunu PUT kullanmalısınız varolan belgenin güncellenmesi için: başlık, bu istisna olsun Updating documents

+2

Sadece beni yaklaşık% 8 daha mutlu etti, teşekkürler! – pgsandstrom

+0

Oh,% 10 hedefliyordum. Bummer;) –

+1

Bana% 3 daha mutlu oldun, bu yüzden şimdi hedefini aştın. ;) –

1

Sen sorgulamak için ilk ihtiyaç dosya. Yanıtta, adı "edit-media" olan bağlantılar listesinden bir öğe aramak istiyorsunuz. Sonra bu adrese gönderirsiniz.

aşağıda google-istemci API web sitesinden Google'ın örnek proje docs-v3-atom-oauth-numune eklenebilir kod http://code.google.com/p/google-api-java-client/wiki/GoogleAPIs

private String queryRegistryforEditId() { 
    String str ="https://docs.google.com/feeds/default/private/full?title=" + URL_FRIENDLY_QUERY_PHRASE; 
    DocsUrl url = new DocsUrl(str); 

    DocumentListFeed feed; 
    try { 
     feed = DocumentListFeed.executeGet(transport, url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 

    //display(feed); 
    String ans = null; 
    //LIST OF FILES MATCHING QUERY 
    for (DocumentListEntry doc : feed.docs) { 
     //doc.content.src has url to download file 
     //I added src to content class that comes from the sameple code 
     Map<String, String> data = retriveDocUsingId(doc.content.src); 

     List<Link> lik = doc.links; 
     for (Link i : lik) { 
      //look for "edit-media" to get url to post edits to file 
      if (i.rel.equals("edit-media")) { 
       ans = i.href; 
       System.out.println(i.href); 
      } 
     } 
     //System.out.println(" doc.title: " + doc.title + " doc.id " + doc.id); 
    } 
    return ans; 
} 

private void updateDocumentText(String edit) { 
    HttpRequest request = transport.buildPutRequest(); 
    request.url = new GoogleUrl(edit); 

    GoogleHeaders headers = (GoogleHeaders)transport.defaultHeaders; 
    headers.contentType = "text/plain"; 
    headers.gdataVersion = "3"; 
    headers.slug = "examplefile"; 
    headers.ifMatch = "*";  
    request.headers = headers; 

    AtomParser parser = new AtomParser(); 
    parser.namespaceDictionary = Namespace.DICTIONARY; 
    transport.addParser(parser); 
    File file = new File ("/newfilepath/test233.txt"); 

    InputStreamContent bContent = new InputStreamContent(); 
    bContent.type = "text/plain"; 
    request.content = bContent; 

    try { 
     bContent.setFileInput(file); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 

    com.google.api.client.http.HttpResponse res2; 
    try { 
     res2 = request.execute(); 
     System.out.println(res2.parseAsString()); 
    } catch (HttpResponseException e) { 
     try { 
      System.out.println(e.response.parseAsString()); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}