zoukankan      html  css  js  c++  java
  • ANDROID_MARS学习笔记_S04_007_从服务器获取微博数据时间线

    、代码

    1.xml
    (1)activity_main.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:orientation="vertical"
     4     android:layout_width="fill_parent"
     5     android:layout_height="fill_parent"
     6     >
     7         <Button android:id="@+id/btn_launch_oauth"
     8                 android:layout_width="fill_parent"
     9                 android:layout_height="wrap_content"
    10                 android:text="Launch OAuth Flow"/>
    11 
    12         <Button 
    13                 android:id="@+id/btn_sendWeiBo"
    14                 android:layout_width="fill_parent"
    15                 android:layout_height="wrap_content"
    16                 android:text="发送一条微博消息"
    17         />
    18         <Button 
    19                 android:id="@+id/btn_getWeiBoList"
    20                 android:layout_width="fill_parent"
    21                 android:layout_height="wrap_content"
    22                 android:text="得到主页时间线数据"
    23         />
    24 </LinearLayout>

    (2)AndroidManifest.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3       package="org.marsdroid.oauth04"
     4       android:versionCode="1"
     5       android:versionName="1.0">
     6     <uses-sdk android:minSdkVersion="10" />
     7     <uses-permission android:name="android.permission.INTERNET" />
     8     <application android:icon="@drawable/icon" android:label="@string/app_name">
     9         <activity android:name=".MainActivity" android:label="@string/app_name">
    10             <intent-filter>
    11                 <action android:name="android.intent.action.MAIN" />
    12                 <category android:name="android.intent.category.LAUNCHER" />
    13             </intent-filter>
    14         </activity>
    15         <activity android:name=".PrepareRequestTokenActivity" android:launchMode="singleTask">
    16             <intent-filter>
    17                 <action android:name="android.intent.action.VIEW" />
    18                 <category android:name="android.intent.category.DEFAULT" />
    19                 <category android:name="android.intent.category.BROWSABLE" />
    20                 <data android:scheme="x-oauthflow" android:host="callback" />
    21             </intent-filter>
    22         </activity>
    23     </application>
    24     
    25 </manifest>

    2.java
    (1)MainActivity.java

     1 import java.util.ArrayList;
     2 import java.util.HashMap;
     3 import java.util.List;
     4 import java.util.Map;
     5 
     6 import org.marsdroid.model.WeiBoList;
     7 
     8 import oauth.signpost.OAuth;
     9 import android.app.Activity;
    10 import android.content.Intent;
    11 import android.content.SharedPreferences;
    12 import android.os.Bundle;
    13 import android.preference.PreferenceManager;
    14 import android.view.View;
    15 import android.view.View.OnClickListener;
    16 import android.widget.Button;
    17 
    18 import com.google.gson.Gson;
    19 
    20 public class MainActivity extends Activity {
    21     
    22     final String TAG = getClass().getName();
    23     private SharedPreferences prefs;
    24     /** Called when the activity is first created. */
    25     @Override
    26     public void onCreate(Bundle savedInstanceState) {
    27         super.onCreate(savedInstanceState);
    28         setContentView(R.layout.main);
    29         
    30         prefs = PreferenceManager.getDefaultSharedPreferences(this);
    31         Button launchOauth = (Button) findViewById(R.id.btn_launch_oauth);
    32         Button sendWeiBoButton = (Button)findViewById(R.id.btn_sendWeiBo);
    33         Button getWeiBoListButton = (Button)findViewById(R.id.btn_getWeiBoList);
    34         
    35         sendWeiBoButton.setOnClickListener(new OnClickListener() {
    36             
    37             @Override
    38             public void onClick(View v) {
    39                 //收集需要向腾讯微博服务器端发送的数据
    40                 Map<String,String> map = new HashMap<String,String>();
    41                 map.put("content", "test");
    42                 map.put("clientip", "127.0.0.1");
    43                 map.put("format", "json");
    44                 //URL编码
    45                 List<String> decodeNames = new ArrayList<String>();
    46                 decodeNames.add("oauth_signature");
    47                 //生成WeiboClient对象需要四个参数:Consumer_key,Consumer_key_secret,Oauth_tokent,OAuth_token_secret
    48                 String OAuth_token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    49                 String OAuth_token_secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    50                 WeiBoClient weiBoClient = new WeiBoClient(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET, OAuth_token, OAuth_token_secret);
    51                 weiBoClient.doPost("http://open.t.qq.com/api/t/add",map,decodeNames);
    52             }
    53         });
    54         
    55         getWeiBoListButton.setOnClickListener(new OnClickListener(){
    56 
    57             @Override
    58             public void onClick(View v) {
    59                 Map<String,String> keyValues = new HashMap<String,String>();
    60                 keyValues.put("format", "json");
    61                 keyValues.put("pageflag", "0");
    62                 keyValues.put("pagetime", "0");
    63                 keyValues.put("reqnum", "20");
    64                 String OAuth_token = prefs.getString(OAuth.OAUTH_TOKEN, "");
    65                 String OAuth_token_secret = prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
    66                 WeiBoClient weiBoClient = new WeiBoClient(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET, OAuth_token, OAuth_token_secret);
    67                 String result = weiBoClient.doGet(Constants.WeiBoApi.HOME_TIMELINE, keyValues);
    68                 System.out.println("result--->" + result);
    69                 Gson gson = new Gson();
    70                 WeiBoList weiBoList = gson.fromJson(result, WeiBoList.class);
    71                 System.out.println("WeiBoList--->" + weiBoList);
    72             }
    73             
    74         });
    75         
    76         launchOauth.setOnClickListener(new OnClickListener() {
    77             public void onClick(View v) {
    78                 startActivity(new Intent().setClass(v.getContext(), PrepareRequestTokenActivity.class));
    79             }
    80         });
    81     }
    82 
    83 }

    (2)WeiBoClient.java

      1 import java.util.List;
      2 import java.util.Map;
      3 
      4 import oauth.signpost.OAuthConsumer;
      5 import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
      6 
      7 import org.apache.http.Header;
      8 import org.apache.http.HttpEntity;
      9 import org.apache.http.HttpResponse;
     10 import org.apache.http.NameValuePair;
     11 import org.apache.http.client.HttpClient;
     12 import org.apache.http.client.entity.UrlEncodedFormEntity;
     13 import org.apache.http.client.methods.HttpGet;
     14 import org.apache.http.client.methods.HttpPost;
     15 import org.apache.http.impl.client.DefaultHttpClient;
     16 import org.marsdroid.oauth04.utils.ApacheUtils;
     17 import org.marsdroid.oauth04.utils.HttpUtils;
     18 import org.marsdroid.oauth04.utils.OAuthUtils;
     19 import org.marsdroid.oauth04.utils.StringUtils;
     20 import org.marsdroid.oauth04.utils.UrlUtils;
     21 
     22 public class WeiBoClient {
     23     private OAuthConsumer consumer;
     24 
     25     public WeiBoClient() {
     26 
     27     }
     28 
     29     public WeiBoClient(String consumerKey, String consumerSecret,
     30             String oauthToken, String oauthTokenSecret) {
     31         // 生成一个OAuthConsumer对象
     32         consumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
     33         // 设置OAuth_Token和OAuth_Token_Secret
     34         consumer.setTokenWithSecret(oauthToken, oauthTokenSecret);
     35     }
     36 
     37     public String doGet(String url, Map<String, String> addtionalParams) {
     38         String result = null;
     39         url = UrlUtils.buildUrlByQueryStringMapAndBaseUrl(url, addtionalParams);
     40         String signedUrl = null;
     41         try {
     42             System.out.println("签名之前的URL--->" + url);
     43             signedUrl = consumer.sign(url);
     44             System.out.println("签名之后的URL--->" + signedUrl);
     45         } catch (Exception e) {
     46             e.printStackTrace();
     47         }
     48         HttpGet getRequest = new HttpGet(signedUrl);
     49         HttpClient httpClient = new DefaultHttpClient();
     50         HttpResponse response = null;
     51         try {
     52             response = httpClient.execute(getRequest);
     53         } catch (Exception e) {
     54             // TODO Auto-generated catch block
     55             e.printStackTrace();
     56         }
     57         result = ApacheUtils.parseStringFromEntity(response.getEntity());
     58         return result;
     59     }
     60 
     61     public String doPost(String url, Map<String, String> addtionalParams,
     62             List<String> decodeNames) {
     63         // 生成一个HttpPost对象
     64         HttpPost postRequest = new HttpPost(url);
     65         consumer = OAuthUtils.addAddtionalParametersFromMap(consumer,
     66                 addtionalParams);
     67         try {
     68             consumer.sign(postRequest);
     69         } catch (Exception e) {
     70             e.printStackTrace();
     71         }
     72 
     73         Header oauthHeader = postRequest.getFirstHeader("Authorization");
     74         System.out.println(oauthHeader.getValue());
     75         String baseString = oauthHeader.getValue().substring(5).trim();
     76         Map<String, String> oauthMap = StringUtils
     77                 .parseMapFromString(baseString);
     78         oauthMap = HttpUtils.decodeByDecodeNames(decodeNames, oauthMap);
     79         addtionalParams = HttpUtils.decodeByDecodeNames(decodeNames,
     80                 addtionalParams);
     81         List<NameValuePair> pairs = ApacheUtils
     82                 .convertMapToNameValuePairs(oauthMap);
     83         List<NameValuePair> weiboPairs = ApacheUtils
     84                 .convertMapToNameValuePairs(addtionalParams);
     85         pairs.addAll(weiboPairs);
     86 
     87         HttpEntity entity = null;
     88         HttpResponse response = null;
     89         try {
     90             entity = new UrlEncodedFormEntity(pairs);
     91             postRequest.setEntity(entity);
     92             response = new DefaultHttpClient().execute(postRequest);
     93         } catch (Exception e) {
     94             e.printStackTrace();
     95         }
     96 
     97         String result = ApacheUtils.getResponseText(response);
     98 
     99         return result;
    100     }
    101 }

    (3)PrepareRequestTokenActivity.java(和上个例子一样)

     1 import oauth.signpost.OAuthConsumer;
     2 import oauth.signpost.OAuthProvider;
     3 import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
     4 import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
     5 import android.app.Activity;
     6 import android.content.Intent;
     7 import android.content.SharedPreferences;
     8 import android.net.Uri;
     9 import android.os.Bundle;
    10 import android.preference.PreferenceManager;
    11 
    12 public class PrepareRequestTokenActivity extends Activity {
    13 
    14     private OAuthConsumer consumer;
    15     private OAuthProvider provider;
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         // TODO Auto-generated method stub
    20         super.onCreate(savedInstanceState);
    21 
    22         System.setProperty("debug", "true");
    23         consumer = new CommonsHttpOAuthConsumer(Constants.CONSUMER_KEY,
    24                 Constants.CONSUMER_SECRET);
    25         provider = new CommonsHttpOAuthProvider(Constants.REQUEST_URL,
    26                 Constants.ACCESS_URL, Constants.AUTHORIZE_URL);
    27 
    28         new OAuthRequestTokenTask(this, consumer, provider).execute();
    29     }
    30 
    31     @Override
    32     public void onNewIntent(Intent intent) {
    33         super.onNewIntent(intent);
    34         SharedPreferences prefs = PreferenceManager
    35                 .getDefaultSharedPreferences(this);
    36         final Uri uri = intent.getData();
    37         System.out.println(uri.toString());
    38         if (uri != null
    39                 && uri.getScheme().equals(Constants.OAUTH_CALLBACK_SCHEME)) {
    40             new RetrieveAccessTokenTask(this, consumer, provider, prefs)
    41                     .execute(uri);
    42             finish();
    43         }
    44     }
    45 }

    (4)Constants.java

     1 public class Constants {
     2 
     3     public static final String CONSUMER_KEY     = "99e9494ff07e42489f4ace16b63e1f47";
     4     public static final String CONSUMER_SECRET     = "154f6f9ab4c1cf527f8ad8ab1f8e1ec9";
     5 
     6     public static final String REQUEST_URL         = "https://open.t.qq.com/cgi-bin/request_token";
     7     public static final String ACCESS_URL         = "https://open.t.qq.com/cgi-bin/access_token";  
     8     public static final String AUTHORIZE_URL     = "https://open.t.qq.com/cgi-bin/authorize";
     9     
    10     public static final String ENCODING         = "UTF-8";
    11     
    12     public static final String    OAUTH_CALLBACK_SCHEME    = "x-oauthflow";
    13     public static final String    OAUTH_CALLBACK_HOST        = "callback";
    14     public static final String    OAUTH_CALLBACK_URL        = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
    15     class WeiBoApi{
    16         //主页时间线
    17         public static final String HOME_TIMELINE = "http://open.t.qq.com/api/statuses/home_timeline";
    18         //我发表的时间线
    19         public static final String BROADCAST_TIMELINE = "http://open.t.qq.com/api/statuses/broadcast_timeline";
    20         //@到我的时间线
    21         public static final String MENTIONS_TIMELINE = "http://open.t.qq.com/api/statuses/mentions_timeline";
    22         //发表一条新微博
    23         public static final String ADD = "http://open.t.qq.com/api/t/add";
    24         //删除一条微博
    25         public static final String DEL = "http://open.t.qq.com/api/t/del";
    26         
    27         
    28     }
    29 }

    (5)WeiBoListData.java

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class WeiBoListData {
     5     private long timestamp;
     6     private int hasnext;
     7     private int totalNum;
     8     private List<WeiBoData> info = new ArrayList<WeiBoData>();
     9     public List<WeiBoData> getInfo() {
    10         return info;
    11     }
    12     public void setInfo(List<WeiBoData> info) {
    13         this.info = info;
    14     }
    15     public WeiBoListData(long timestamp, int hasnext, int totalNum) {
    16         super();
    17         this.timestamp = timestamp;
    18         this.hasnext = hasnext;
    19         this.totalNum = totalNum;
    20     }
    21     public WeiBoListData() {
    22         super();
    23     }
    24     public long getTimestamp() {
    25         return timestamp;
    26     }
    27     public void setTimestamp(long timestamp) {
    28         this.timestamp = timestamp;
    29     }
    30     public int getHasnext() {
    31         return hasnext;
    32     }
    33     public void setHasnext(int hasnext) {
    34         this.hasnext = hasnext;
    35     }
    36     public int getTotalNum() {
    37         return totalNum;
    38     }
    39     public void setTotalNum(int totalNum) {
    40         this.totalNum = totalNum;
    41     }
    42     @Override
    43     public String toString() {
    44         return "WeiBoListData [hasnext=" + hasnext + ", info=" + info
    45                 + ", timestamp=" + timestamp + ", totalNum=" + totalNum + "]";
    46     }
    47     
    48 }

    (6)WeiBoList.java

     1 public class WeiBoList {
     2     private int ret;
     3     private String msg;
     4     private int errcode;
     5     private WeiBoListData data;
     6 
     7     public WeiBoList(int ret, String msg, int errcode, WeiBoListData data) {
     8         super();
     9         this.ret = ret;
    10         this.msg = msg;
    11         this.errcode = errcode;
    12         this.data = data;
    13     }
    14 
    15     public WeiBoList() {
    16         super();
    17     }
    18 
    19     public int getRet() {
    20         return ret;
    21     }
    22 
    23     public void setRet(int ret) {
    24         this.ret = ret;
    25     }
    26 
    27     public String getMsg() {
    28         return msg;
    29     }
    30 
    31     public void setMsg(String msg) {
    32         this.msg = msg;
    33     }
    34 
    35     public int getErrcode() {
    36         return errcode;
    37     }
    38 
    39     public void setErrcode(int errcode) {
    40         this.errcode = errcode;
    41     }
    42 
    43     public WeiBoListData getData() {
    44         return data;
    45     }
    46 
    47     public void setData(WeiBoListData data) {
    48         this.data = data;
    49     }
    50 
    51     @Override
    52     public String toString() {
    53         return "WeiBoList [data=" + data + ", errcode=" + errcode + ", msg="
    54                 + msg + ", ret=" + ret + "]";
    55     }
    56     
    57 }

    (7)WeiBoData.java

      1 import java.util.List;
      2 
      3 //单条微博数据模型对象
      4 
      5 public class WeiBoData {
      6     private String text;
      7     private String origtext;
      8     private int count;
      9     private int mcount;
     10     private String from;
     11     private long id;
     12     //private image
     13     private String name;
     14     private String nick;
     15     private String uid;
     16     private int self;
     17     private long timestamp;
     18     private int type;
     19     private String head;
     20     private String location;
     21     private String country_code;
     22     private String province_code;
     23     private String city_code;
     24     private int isVip;
     25     private int status;
     26     private WeiBoData source;
     27     private List<String> image;
     28     public List<String> getImage() {
     29         return image;
     30     }
     31     public void setImage(List<String> image) {
     32         this.image = image;
     33     }
     34     public WeiBoData getSource() {
     35         return source;
     36     }
     37     public void setSource(WeiBoData source) {
     38         this.source = source;
     39     }
     40     
     41 
     42     @Override
     43     public String toString() {
     44         return "WeiBoData [city_code=" + city_code + ", count=" + count
     45                 + ", country_code=" + country_code + ", from=" + from
     46                 + ", head=" + head + ", id=" + id + ", image=" + image
     47                 + ", isVip=" + isVip + ", location=" + location + ", mcount="
     48                 + mcount + ", name=" + name + ", nick=" + nick + ", origtext="
     49                 + origtext + ", province_code=" + province_code + ", self="
     50                 + self + ", source=" + source + ", status=" + status
     51                 + ", text=" + text + ", timestamp=" + timestamp + ", type="
     52                 + type + ", uid=" + uid + "]";
     53     }
     54     public String getText() {
     55         return text;
     56     }
     57     public void setText(String text) {
     58         this.text = text;
     59     }
     60     public String getOrigtext() {
     61         return origtext;
     62     }
     63     public void setOrigtext(String origtext) {
     64         this.origtext = origtext;
     65     }
     66     public int getCount() {
     67         return count;
     68     }
     69     public void setCount(int count) {
     70         this.count = count;
     71     }
     72     public int getMcount() {
     73         return mcount;
     74     }
     75     public void setMcount(int mcount) {
     76         this.mcount = mcount;
     77     }
     78     public String getFrom() {
     79         return from;
     80     }
     81     public void setFrom(String from) {
     82         this.from = from;
     83     }
     84     public long getId() {
     85         return id;
     86     }
     87     public void setId(long id) {
     88         this.id = id;
     89     }
     90     public String getName() {
     91         return name;
     92     }
     93     public void setName(String name) {
     94         this.name = name;
     95     }
     96     public String getNick() {
     97         return nick;
     98     }
     99     public void setNick(String nick) {
    100         this.nick = nick;
    101     }
    102     public String getUid() {
    103         return uid;
    104     }
    105     public void setUid(String uid) {
    106         this.uid = uid;
    107     }
    108     public int getSelf() {
    109         return self;
    110     }
    111     public void setSelf(int self) {
    112         this.self = self;
    113     }
    114     public long getTimestamp() {
    115         return timestamp;
    116     }
    117     public void setTimestamp(long timestamp) {
    118         this.timestamp = timestamp;
    119     }
    120     public int getType() {
    121         return type;
    122     }
    123     public void setType(int type) {
    124         this.type = type;
    125     }
    126     public String getHead() {
    127         return head;
    128     }
    129     public void setHead(String head) {
    130         this.head = head;
    131     }
    132     public String getLocation() {
    133         return location;
    134     }
    135     public void setLocation(String location) {
    136         this.location = location;
    137     }
    138 
    139     public String getCountry_code() {
    140         return country_code;
    141     }
    142     public void setCountry_code(String countryCode) {
    143         country_code = countryCode;
    144     }
    145     public String getProvince_code() {
    146         return province_code;
    147     }
    148     public void setProvince_code(String provinceCode) {
    149         province_code = provinceCode;
    150     }
    151     public String getCity_code() {
    152         return city_code;
    153     }
    154     public void setCity_code(String cityCode) {
    155         city_code = cityCode;
    156     }
    157     public int getIsVip() {
    158         return isVip;
    159     }
    160     public void setIsVip(int isVip) {
    161         this.isVip = isVip;
    162     }
    163     public int getStatus() {
    164         return status;
    165     }
    166     public void setStatus(int status) {
    167         this.status = status;
    168     }
    169 }

     

  • 相关阅读:
    [BZOJ2038]小Z的袜子
    [BZOJ5016]一个简单的询问
    [BZOJ1008][HNOI2008]越狱
    [FZU2254]英语考试
    利用Map 的merge方法统计数量
    List 原生态类型
    try-with-resource 关闭 io流
    利用构建器创建对象
    linux 安装 vault
    git 上传文件
  • 原文地址:https://www.cnblogs.com/shamgod/p/5206731.html
Copyright © 2011-2022 走看看