我已经得到了一个几乎完整的API来工作,创建和删除文档和文件夹。但我无法更新文档。使用gdata时非常简单,但由于此代码必须在所有android设备上运行,所以我必须使用google api java客户端。下面是我测试更新的方法:
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;
}
}实际情况是,我只是创建了一个新文档(使用给定的内容,创建一个新文档是完美的)。如果我添加了“If --header:*”匹配,我会得到这个异常:
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)
...发布于 2010-11-19 18:47:41
要更新现有文档,应使用PUT命令:Updating documents
发布于 2011-04-15 17:08:45
您首先需要查询该文件。在响应中,您希望在链接列表中查找名称为"edit-media“的元素。然后你把邮件寄到那个地址。
下面的代码可以从google-client api的网站http://code.google.com/p/google-api-java-client/wiki/GoogleAPIs添加到google的示例项目docs-v3-atom-oauth-sample中
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();
}
}https://stackoverflow.com/questions/4224100
复制相似问题