1

我已经得到了几乎完整的API工作,与创建和删除文档和文件夹。但我无法更新文档。使用gdata时非常简单,但由于此代码必须适用于所有Android设备,因此我必须使用google api java客户端。这里是我测试更新的方法:更新谷歌文档与谷歌API api客户端

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; 
    } 
} 

什么情况是,我只需要创建一个新的文件(与给定的内容,创建一个新的文件运行完美)。如果我添加“如果 - 匹配:*” - 头,我得到这个异常:

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) 
... 

回答

3

用于更新现有的文件,你应该使用PUT命令:Updating documents

+2

你只是让我约8%更开心,谢谢! – pgsandstrom 2010-11-19 14:07:05

+0

哦,我的目标是10%。 Bummer;) – 2010-11-19 14:18:45

+1

你让我快乐3%,所以我猜你现在已经超出了你的目标。 ;) – 2011-06-02 11:47:15

1

首先,您需要查询的文件。在响应中,您希望查找名称为“edit-media”的链接列表中的某个元素。您然后发布到该地址。

下面可以添加到谷歌的样本项目文档-V3-原子OAuth的样品从谷歌的客户端API的网站代码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(); 
    } 
} 
相关问题