package com.google.api.services.samples.googleplus.cmdline.simple;
 
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpResponseException;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.GenericJson;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.JsonObjectParser;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.Key;
 
import java.io.IOException;
import java.util.List;
 
/**
 * Simple example that demonstrates how to use <a
 * href="code.google.com/p/google-http-java-client/">Google HTTP Client Library for Java</a> with
 * the <a href="https://developers.google.com/+/api/">Google+ API</a>.
 *
 * <p>
 * Note that in the case of the Google+ API, there is a much better custom library built on top of
 * this HTTP library that is much easier to use and hides most of these details for you. See <a
 * href="http://code.google.com/p/google-api-java-client/wiki/APIs#Google+_API">Google+ API for
 * Java</a>.
 * </p>
 *
 * @author Yaniv Inbar
 */
publicclassGooglePlusSample{
 
  privatestaticfinalString API_KEY =
      "Enter API Key from https://code.google.com/apis/console/?api=plus into API_KEY";
 
  privatestaticfinalString USER_ID ="116899029375914044550";
  privatestaticfinalint MAX_RESULTS =3;
 
  staticfinalHttpTransport HTTP_TRANSPORT =newNetHttpTransport();
  staticfinalJsonFactory JSON_FACTORY =newJacksonFactory();
 
  /** Feed of Google+ activities. */
  publicstaticclassActivityFeed{
 
    /** List of Google+ activities. */
    @Key("items")
    privateList<Activity> activities;
 
    publicList<Activity> getActivities(){
      return activities;
    }
  }
 
  /** Google+ activity. */
  publicstaticclassActivityextendsGenericJson{
 
    /** Activity URL. */
    @Key
    privateString url;
 
    publicString getUrl(){
      return url;
    }
 
    /** Activity object. */
    @Key("object")
    privateActivityObject activityObject;
 
    publicActivityObject getActivityObject(){
      return activityObject;
    }
  }
 
  /** Google+ activity object. */
  publicstaticclassActivityObject{
 
    /** HTML-formatted content. */
    @Key
    privateString content;
 
    publicString getContent(){
      return content;
    }
 
    /** People who +1'd this activity. */
    @Key
    privatePlusOners plusoners;
 
    publicPlusOners getPlusOners(){
      return plusoners;
    }
  }
 
  /** People who +1'd an activity. */
  publicstaticclassPlusOners{
 
    /** Total number of people who +1'd this activity. */
    @Key
    privatelong totalItems;
 
    publiclong getTotalItems(){
      return totalItems;
    }
  }
 
  /** Google+ URL. */
  publicstaticclassPlusUrlextendsGenericUrl{
 
    publicPlusUrl(String encodedUrl){
      super(encodedUrl);
    }
 
    @SuppressWarnings("unused")
    @Key
    privatefinalString key = API_KEY;
 
    /** Maximum number of results. */
    @Key
    privateint maxResults;
 
    publicint getMaxResults(){
      return maxResults;
    }
 
    publicPlusUrl setMaxResults(int maxResults){
      this.maxResults = maxResults;
      returnthis;
    }
 
    /** Lists the public activities for the given Google+ user ID. */
    publicstaticPlusUrl listPublicActivities(String userId){
      returnnewPlusUrl(
          "https://www.googleapis.com/plus/v1/people/"+ userId +"/activities/public");
    }
  }
 
  privatestaticvoid parseResponse(HttpResponse response)throwsIOException{
    ActivityFeed feed = response.parseAs(ActivityFeed.class);
    if(feed.getActivities().isEmpty()){
      System.out.println("No activities found.");
    }else{
      if(feed.getActivities().size()== MAX_RESULTS){
        System.out.print("First ");
      }
      System.out.println(feed.getActivities().size()+" activities found:");
      for(Activity activity : feed.getActivities()){
        System.out.println();
        System.out.println("-----------------------------------------------");
        System.out.println("HTML Content: "+ activity.getActivityObject().getContent());
        System.out.println("+1's: "+ activity.getActivityObject().getPlusOners().getTotalItems());
        System.out.println("URL: "+ activity.getUrl());
        System.out.println("ID: "+ activity.get("id"));
      }
    }
  }
 
  privatestaticvoid run()throwsIOException{
    HttpRequestFactory requestFactory =
        HTTP_TRANSPORT.createRequestFactory(newHttpRequestInitializer(){
            @Override
          publicvoid initialize(HttpRequest request){
            request.setParser(newJsonObjectParser(JSON_FACTORY));
          }
        });
    PlusUrl url =PlusUrl.listPublicActivities(USER_ID).setMaxResults(MAX_RESULTS);
    url.put("fields","items(id,url,object(content,plusoners/totalItems))");
    HttpRequest request = requestFactory.buildGetRequest(url);
    parseResponse(request.execute());
  }
 
  publicstaticvoid main(String[] args){
    if(API_KEY.startsWith("Enter ")){
      System.err.println(API_KEY);
      System.exit(1);
    }
    try{
      try{
        run();
        return;
      }catch(HttpResponseException e){
        System.err.println(e.getMessage());
      }
    }catch(Throwable t){
      t.printStackTrace();
    }
    System.exit(1);
  }
}

google-http-java-client(android学习篇2源码)的更多相关文章

  1. Netty学习篇⑥--ByteBuf源码分析

    什么是ByteBuf? ByteBuf在Netty中充当着非常重要的角色:它是在数据传输中负责装载字节数据的一个容器;其内部结构和数组类似,初始化默认长度为256,默认最大长度为Integer.MAX ...

  2. Android学习笔记——从源码看Handler的处理机制

    可能是出于性能的考虑,Android的UI操作是非线程安全的. 也就是说,如果你在一个新开的线程中直接操作UI是会引发异常的. 但是,Android又规定,不要去阻塞UI线程!否则,轻者引起程序卡顿, ...

  3. ESA2GJK1DH1K基础篇: Android实现MQTT封装源码使用说明

    说明 这一节说明一下基础篇APP源码里面MyMqttCilent.java这个文件的使用 新建工程 安装MQTT的jar包 implementation 'org.eclipse.paho:org.e ...

  4. [Android FrameWork 6.0源码学习] View的重绘过程之WindowManager的addView方法

    博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Andr ...

  5. Java中常用的七个阻塞队列第二篇DelayQueue源码介绍

    Java中常用的七个阻塞队列第二篇DelayQueue源码介绍 通过前面两篇文章,我们对队列有了了解及已经认识了常用阻塞队列中的三个了.本篇我们继续介绍剩下的几个队列. 本文主要内容:通过源码学习De ...

  6. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)

    1,接着我们上一篇继续介绍,在上一篇我们介绍了简单的@Inject和@Component的结合使用,现在我们继续以老师和学生的例子,我们知道学生上课的时候都会有书籍来辅助听课,先来看看我们之前的Stu ...

  7. android 近百个源码项目【转】

    http://www.cnblogs.com/helloandroid/articles/2385358.html Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多 ...

  8. Android -- 带你从源码角度领悟Dagger2入门到放弃

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

  9. Android -- 带你从源码角度领悟Dagger2入门到放弃(一)

    1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...

随机推荐

  1. DOS下快速删除文件

    Windows服务器或普通操作系统中经常会遇到很多生成的临时文件需要删除,如果需要删除的文件夹中数目很多,且文件很巨大时,如果通过鼠标选择文件夹再直接删除会响应得非常慢,特别是文件数量也巨大时,Win ...

  2. APC to USB

    from :http://www.allpinouts.org/index.php/APC_USB_cable_schematic connector or cable wiring APC part ...

  3. JVM-class文件完全解析-常量池

    在.java文件,讲过javac编译后产生的 .class文件中,头4个字节表示的是魔数,接着魔数后面的第5,6个字节存储的是次版本号,第7,8个字节存储的主板本号.那么再接下来的就是表示常量池入口了 ...

  4. lib静态链接库,dll动态链接库,h文件

    最近在弄摄像头,发现我在调用摄像头自带的函数的时候,库没连接上,于是经过高人指点,学习了一下lib静态链接库,dll动态链接库来补充一下自己的基础知识. 一.首先我们来介绍一下lib静态链接库. li ...

  5. 虚拟机安装Linux系统图文教程

    虚拟机安装Linux系统图文教程 | 浏览:523 | 更新:2014-09-16 15:31 1 2 3 4 5 6 7 分步阅读 Linux系统的安装 工具/原料 VMware 9.0 虚拟机 L ...

  6. js jquery 判断函数是否存在($.isFunction函数的使用)

    var fun = "testFun"; // 函数的名称 try{ 3 if($.isFunction(fun)){ } } $.alert(fun +'不是函数!'); } 注 ...

  7. META标签的NAME变量

    META标签的NAME变量语法格式是: <META NAME=xxx CONTENT=xxxxxxxxxxxxxxxxxx> 其中xxx主要有下面几种参数: 1. Keywords(关键字 ...

  8. IOS网络开发概述

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  9. QT5.4关联VS2010,配置VAssistX关联Qt类

    1.参考网站:http://www.kavenblog.com/?p=272 2.下载插件:http://www.qt.io/zh-hans/download-open-source/#section ...

  10. Cocos2d-x 3.x项目创建

    1.首先打开终端,cd到cocos2d-x-3.2目录下,运行命令./setup.py 2. 首先,打开终端cd到目录/cocos2d-x-3.2/tools/cocos2d-console/bin下 ...