在Android上使用GData API的最佳选择是什么?

43

如何在Android应用程序中使用Google Data APIs,使其尽可能地不痛苦且最小化?

经过快速搜索,似乎在Google Code上有一个android-gdata项目,看起来是单个作者的工作。我没有找到任何文档,也不知道它是否已准备好供生产使用。

一个更旧的选项,com.google.wireless.gdata包似乎已从SDK中移除。 它仍然可用于GIT存储库中。

在我投入太多时间之前,我想知道哪个方法得到了最佳支持且最少痛苦。


3
我很想知道这个问题的答案,我相当惊讶的是Android API甚至没有包含Gdata API的子集,为什么不把这些非常有用的组件捆绑在一起呢! - Salim Fadhley
2
令人惊奇的是,目前最难开发gdata应用程序的设备是Android,而你必须跳过的循环也很多。 - Chris S
5个回答

32

Chris,不,google-api-java-client库中没有依赖于Javamail,也没有MediaStreamSource。这只是旧的gdata-java-client库中的问题。 - Yaniv Inbar
@Yaniv,1.10 Alpha 版本有这个功能吗? - Chris S
是的,尽管在Android上您需要使用AccountManager。请参见http://code.google.com/p/google-api-java-client/wiki/AndroidAccountManager。 - Yaniv Inbar
@Yaniv Inbar,您能否检查一下我在您的API中遇到的问题?http://stackoverflow.com/q/7230435/689853 - Harinder
7
我感到困惑。我想在Android环境中获取Google表格数据。Yaniv的google-api-java-client链接指向一个页面,该页面链接到“我们支持的Google API列表”,其中包括Spreadsheets API,在http://code.google.com/apis/spreadsheets。其中的开发人员指南“入门”部分说明要下载gdata-java-client库以访问API,而所有示例似乎都依赖于gdata-java-client(例如,com.google.gdata.data.spreadsheet.*)。然而,@Yaniv在下面说:“gdata-java-client库不支持Android”。我错过了什么? - joseph_morris
显示剩余2条评论

5
我还查看了Google Code项目和Git存储库。由于所需项目似乎带有负担,我避开了Google Code项目。最终,我根据需要创建了自定义实现,以适应标准Java API。您可以在android-developers group中找到我的解决方案的简略描述。它由4个简短、易于测试的类组成。

3

请尝试使用Google SpreadSheet API for Android

我正在Google Code上维护这个项目,如果您遇到任何问题,请告诉我。

祝好, Prasanta


这个很有效。您只需要注释掉几行指向代理服务器的代码,这些代码似乎是Prasanta无意中留在发布代码中的,以加快响应时间(例如,一分钟与两秒之间)。有关修复方案,请参见上面链接中Google Code的13号问题。 - joseph_morris

2
以下是使用Android Eclipse项目使Google Docs API工作的步骤。 提示:我在SAX异常上遇到了问题。

1

获取GData Java库(通过语言指南)

2

Android Javamail port获取3个罐子。

3

请在您的lib文件夹中添加以下jar包,并使用上下文菜单将它们添加到路径中(构建路径->添加):
  • activation.jar(javamail)
  • additionnal.jar(javamail)
  • mail.jar(javamail)
  • gdata-client-1.0.jar
  • gdata-client-meta-1.0.jar
  • gdata-core-1.0.jar
  • gdata-docs-3.0.jar
  • gdata-docs-meta-3.0.jar
  • gdata-gtt-2.0.jar
  • gdata-gtt-meta-2.0.jar
  • gdata-media-1.0.jar
  • google-collect-1.0-rc1.jar(来自gdata文件夹的deps文件夹)
  • jsr305.jar3。(来自gdata文件夹的deps文件夹)

4

不要忘记在AndroidManifest.xml中添加INTERNET权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

5

尝试一些示例代码:
DocsService client = new DocsService("myappname");
try
{
    client.setUserCredentials("username", "password");

    URL feedUri = new URL("https://docs.google.com/feeds/default/private/full/");
    DocumentListFeed feed = client.getFeed(feedUri, DocumentListFeed.class);

    TextView textView = (TextView) findViewById(R.id.textview);

    String text = ""; 
    for (DocumentListEntry entry : feed.getEntries())
    {
        text += entry.getTitle().getPlainText() + "\r\n";
    }

    textView.setText(text);
}
catch (AuthenticationException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (MalformedURLException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (IOException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}
catch (ServiceException e)
{
    // TODO Auto-generated catch block
    e.printStackTrace();
}

6

在经过2个小时后,从logcat中得到了一个SaxException,接受失败: 警告/XmlParser(1599):javax.xml.parsers.ParserConfigurationException: org.xml.sax.SAXNotRecognizedException: http://xml.org/sax/features/external-parameter-entities ... 在com.google.gdata.wireformats.input.AtomDataParser.parse(AtomDataParser.java:68)执行此最后一步会导致ServiceException。

1
没错,gdata-java-client库不支持Android。这是一个已知的问题。相反,您应该使用google-api-java-client。顺便说一下,下载链接需要更正为http://code.google.com/p/google-api-java-client/downloads/list。 - Yaniv Inbar
@Yaniv 我修复了这个链接。你不觉得他们自己的设备没有本地支持有点奇怪吗?也许他们对此有很大的计划,并且更喜欢不获取GDocs等应用程序。 - Chris S
@Chris S 我使用了你的示例,但连接到登录URI时出现了AuthenticationException错误。 - Harinder
哈哈,我花了两个多小时才完成第六步并接受失败。现在开始使用 Google API,第一步。;) - vivek.m

1

我使用了这个API

我尝试将其转换为.jar文件,但遇到了问题。我发现将项目标记为库项目,然后在我的主项目中使用它很容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接