由于公司需求需要获取Gmail的信息,于是下了Google提供的例子并开始研究GoogleApi的调用,在这个过程中遇到了几个坑同时也学习到了一些知识,现记录如下:
      一 Android QuickStart
        https://developers.google.com/gmail/api/quickstart/android   (链接)
        google 给出了一个对于Andriod 的快速开始的例子,没有现成的源码,但是文章比较详细的介绍了要想在Android上使用gmailApi,需要做的步骤。像任何第三方提供接口一样,你需要相关授权并在其网站上建立该应用(博主也使用过新浪提供的api ,那个坑真是泪泪的。。)。
        step1 中需要Android 的sha1 的签名证书,keytool是jdk的工具,要将其路径加入环境变量中,对我坑的是,文档上 debug.keystore 的地址,由于我的jdk 是安装再d盘的,所以 文档上的 ~ 代表的是D盘,而debug.keystore 是存在在你C 盘下的,所以各种找不到,最后突然顿悟Linux下的命令的相对地址,才发现了这个坑,得到了sha1的签名证书。
         
Linux路径,对相对路径要敏感!
         
        接下来按照步骤来进行,顺利在AS上建立了工程,不过下载相关的依赖也是费了好大劲,结果jar 包下下来之后,开始run,出现错误:
        com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_45\bin\java.exe'' finished with non-zero exit value 2
        上网各种找解决方法,http://stackoverflow.com/questions/30001051/appdexdebug-execexception-finished-with-non-zero-exit-value-2   stackoverflow上的这个解释地很好。就是jar 包的问题。
      用网上的方法去逐个删除jar 包排除这种重复,但是最恐怖的事情发生了,当删除一个jar包的时候重复错误没有了,但是同时代码里的不识别也出来了,这说明一个jar包里面的是一半需要一半不需要! 仔细的比对了文档提供的build.gradle 文件,想到在建立 build.gradle 文件的时候,直接生成的默认的 compileSdkVersion和 targetSdkVersion  等 是 23 ,而例子提供的是22,导致下面 dependencies中 compile 的 包名里面  appcompat-v7:23.0.0 ,和文档给出的不符合,然后添加dependencies 中的其他 依赖,一般都用高版本的,所以想可能是这个原因,将所有数字改成和文档提供的一样,然后,然后。。。就build成功了。。。。
      
 版本的问题有时候很重要,这是对所有开发的坑,特别是jar包,sdk的版本等,时刻拥抱变化。。。
     二 具体API
     quickstart 只是给出了获得当前gmail账户所有标签的例子,谁想要标签啊,当然都是要未读邮件的数目啦,开始理解Gmail的数据结构,下面进行简单的介绍,并不详尽,因为没有太多时间去一一理解:
     Gmail提供了三种数据结构:Threads,Messages,Labels。Threads 在我理解是会话的一次,是指你和另外的一个账户进行会话的过程,而每一个Threads 是可以有多个Messages的,所以Messages就很好理解,就是指一条信息,通过查看它的属性和操作,你可以知道当获得了这个对象之后你可以获得的相关信息和进行的操作;而labels就是你邮箱中定义的标签,从给出的quicstart也可以看出,最后打印出来的有INBOX,SPAM,SENT等各种类型,可以从这个链接上查看https://developers.google.com/gmail/api/guides/labels,更开心的是,看到了User.lables是具有messagesTotal,messagesUnread,threadsTotal,threadsUnread 的属性,那么获得你想要的标签下的对象,然后输出这个属性不就好了,我们想要未读邮箱的数目,那么就是INBOX里面的threadsUnread的属性嘛,很开心的在QuickStart 的程序中对获得的lables进行遍历, 搜集INBOX标签的对象,结果打印的结果是null,试了各种标签的数目都是null,百思不得其解,这个时候一定要再去看google文档,又耐心的找了一遍,发现在具体的介绍操作(get,list,modify,delete等)的页面上有代码段子,并且提供了页面操作,然后发现了获取label的方法有猫腻,QuickStart上仅仅是mActivity.mService.users().labels.list(user).execute(),  只是获得了label的list,而实际上是这样子的:
MActivity.mService.users().labels.get(user,"INBOX").execute() ,这样获得的label对象才能够获得到threadsUnread的数值,果然还是做得看得少了。
       同时还要注意的是,对Gmail邮箱不同类型的操作是需要不同的权限的,只是获得labellist,权限少,但是要获得数目或者是要对具体信息更改创建的时候需要更多的权限,以QuickStart为例,其权限设置在SCOPES一个字符串数组里,你可以向其中添加GmailScopes.GMAIL_LABELS,GmailScope.MAIL_GOOGLE_COM等权限。
   

      三 Android知识  
        在复制QuickStart代码的过程中,学习了一下google技术人员的写法,可能只有两个文件,不能显示出google技术人员的水平,一个mainactivity ,动态写的布局,没有用layout的xml文件,使用了AsynTask来做异步操作,但是惊奇的是在doInbackgroud中进行了UI的操作,但是人家这个UI操作是封装在acitivty中runOnUIThread里面的,看得我也是愣神一愣神的,想必自己经历的还是太少,对于runOnUIThread这个函数,网上有其和handler的使用场景比较,但实际上runOnUiThread的源码即使用了handler 的callbacks 进行完成的,只不过用runOnUithread应该代码量更少而已,所以可能到底用哪个全看喜好了,但关键还是要理解其内部的原理,才能随心所欲。

       记录动态生成布局的例子,有利于理解Android的View其绘制原理:
        LinearLayout activityLayout = new LinearLayout(this);        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(                LinearLayout.LayoutParams.MATCH_PARENT,                LinearLayout.LayoutParams.MATCH_PARENT);        activityLayout.setLayoutParams(lp);        activityLayout.setOrientation(LinearLayout.VERTICAL);        activityLayout.setPadding(16, 16, 16, 16);

        ViewGroup.LayoutParams tlp = new ViewGroup.LayoutParams(                ViewGroup.LayoutParams.WRAP_CONTENT,                ViewGroup.LayoutParams.WRAP_CONTENT);

        mOutputText = new TextView(this);        mOutputText.setLayoutParams(tlp);        mOutputText.setPadding(16, 16, 16, 16);        mOutputText.setVerticalScrollBarEnabled(true);        mOutputText.setMovementMethod(new ScrollingMovementMethod());        activityLayout.addView(mOutputText);
下面给出了自己写的quickstart的源代码,是成型的工程,输出结果为全部邮箱数目和未读邮箱数目,同时加入了一分钟刷新页面的机制<使用的是handler>
PS: Gmal Api部分还有推送部分,还没有时间详细的去了解,想必这个推送对一些app有价值,可以后续有时间了再研究。
下载链接:http://download.csdn.net/detail/elfxwt/9178015
github地址:    https://github.com/elfxwt/GmailQuickStart/tree/master   

Gmail Api 的解读及例子相关推荐

  1. 北理工操作系统实验合集 | API解读与例子

    文章目录 传送门 实验报告与源码下载 前言 进程控制API Linux getpid/getppid fork/vfork exit/_exit exec函数族 wait/waitpid pause/ ...

  2. gmail怎么发送html,如何通过gmail api for python发送HTML格式的电子邮件

    使用GMail API Example: Send Mail中的示例代码,在遵循身份验证规则之后,通过gmail帐户发送以编程方式生成的电子邮件就足够简单了.从这个例子中不明显的是如何将电子邮件设置为 ...

  3. VC API常用函数简单例子大全(1-89)

    第一个:FindWindow根据窗口类名或窗口标题名来获得窗口的句柄,该函数返回窗口的句柄 函数的定义:HWND WINAPI FindWindow(LPCSTR lpClassName ,LPCST ...

  4. Java日期与时间API(详解全部新与旧API,含代码例子)

    目录 前言必读 二.新与旧API 新的API: 旧的API: 初步使用大全(SimpleDateFormat) 三.代码例子 1.获取当前时间 2.字符串转化为时间 四.新的API 1.LocalDa ...

  5. VC API常用函数简单例子大全

    VC API常用函数简单例子大全 http://hi.baidu.com/tag/vc%20api%E5%87%BD%E6%95%B0/feeds 系统API查询 http://www.vbgood. ...

  6. 《Unix网络编程卷1-套接字联网API》第一个例子编译 不通过问题解决

    <Unix网络编程卷1-套接字联网API>是本好书. 但是第一个例子不是很好编译. 需要如下步骤: 本人机器CentOS 5.4 1.下载源码 unpv13e解压到任意目录 然后按其rea ...

  7. Fetch API 初步解读

    文 | Leigh,UPYUN 已获得授权 微信文章链接:http://t.cn/R4afStO 在我们日常的前端开发中,XMLHttpRequest 是必不可少会遇到的一个东东.XHR 最初是由微软 ...

  8. Google Maps Android API v2官网例子使用说明

    2019独角兽企业重金招聘Python工程师标准>>> 1.安装Google Play services SDK Google Maps SDK已经作为Google Play ser ...

  9. jQuery - (JQuery datatables api 使用解读)

    学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...

最新文章

  1. 在后台代码中引入XAML的方法
  2. python读取大文件-python读取大文件
  3. 常考数据结构与算法-NC105 二分查找-II
  4. css4个伪元素,CSS_CSS3中的content属性使用示例,CSS中主要的伪元素有四个:befo - phpStudy...
  5. php调http接口,2步教你解决http协议php接口调用
  6. ITK:在矢量图像上执行注册
  7. 第一次ScrumMeeting博客:团队任务分解
  8. MySQL找出锁等待
  9. java 删除二维数组中的null_避免在Java中检查Null语句
  10. 山东鲁能轨道智能巡检机器人_城市轨道智能巡检机器人原来你这么酷炫!
  11. 历史沉重,人人生活在历史里
  12. mysql存放lng lat_使用空间点类型在MySQL中存储Lat Lng值
  13. linux下的C语言开发(开篇)
  14. Python3 图片添加水印
  15. bcm4322linux驱动下载,苹果MAC BOOK PRO 5.5 2009年中 安装fedora26——broadcom BCM4322 无线驱动在fedora上的安装...
  16. []==''返回?为什么?运算符==进行了什么操作?
  17. cuda安装失败问题2:install of driver component failed
  18. TeeChart界面元素使用说明(区域填充、Marks、Annotation)
  19. 关于html2canvas截图模糊的CDN版本差异的一个坑
  20. ZOJ The Sum of Unitary Totient

热门文章

  1. 2021上海酵素展商讯-酵素人必备的常见酵素知识(及时收藏)
  2. navbar-default、navbar-brand(logo栏)、navbar-text
  3. 如何像【羊了个羊】那样获得流量
  4. python逆序输出字符串_python实现对指定输入的字符串逆序输出的6种方法
  5. 2021-11-16 以太网
  6. 【无标题】新冠病毒变异株检测——荧光定量PCR检测技术开发
  7. 杭钢集团:以用友iuap为数智底座的数智化转型之路
  8. 干货!原始数据中的反绎知识归纳
  9. 基于MATLAB的有限元法求解EIT技术的正问题
  10. 数据分析 和 PowerBI 和 DAX 的核心