新浪微博客户端开发之授权登录+获取微博列表

本文档详细介绍了如何进行新浪微博客户端的授权登录和获取微博列表的流程,适合初学者入门。教程通俗易懂,旨在帮助开发者快速掌握相关技能。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

新浪微博客户端开发之授权登录+获取微博列表


闲篇:
最近实在是乱得不行,至于怎么乱我也不知该怎么说,那么久没发博客就证明了这点,一般如果小巫有做详尽的计划,并把时间投入到上面的话,我是可以用最短的时间里把新浪微博客户端给整出来的,但现在进度很慢,我越来越不像个称职的程序猿,因为现在的生活已经不再是代码,更多的是想多享受跟朋友们在一起的快乐。这些话也不多说了,关于这个项目,其实我也头痛了一整子,我很久之前就买了一本李宁的Android应用开发实战,里面很大篇幅就是介绍这个客户端的开发,因为一开始我是比较迷惑的,迷惑他到底有没有使用新浪开发平台提供的SDK,然而整个授权过程到获取微博的各种数据又是怎样的?我还在考虑我要做成一个怎样的,是否只是单纯的模仿呢?反正种种疑虑,一阵子找不到北了。后来我花时间研究了他的代码,慢慢的也找了了一些门道,明白了他从是怎么把整个客户端搭建起来的,他没有使用新浪给我们提供的SDK,而似乎是把SDK的实现给翻出来了,因为SDK仅仅提供了获取微博数据的封装,开发者就只需调用API,知道怎么传参数就行了,所以很多高手是不会直接使用新浪提供的Android SDK。要我从头到尾开发,把所有业务逻辑实现,我实在不行,所以会直接参考Android应用开发实战所提供的代码,把整个新浪微博客户端开发出来给大家看看,这也算是小巫的一个提升,与大家共同进步。


正篇:
本篇博客呢,主要介绍如何进行授权认证,如何获取微博列表,因为代码比较多,我不会全部都能贴出来,整个客户端也没有开发完毕,我也是实现一个功能,然后整理博客发表出来,如果想要项目源码的,可以直接找我,我的 QQ:659982592, 如果我在的话,我会尽快答复你的。
先来看看本篇博客想要实现的效果图:



看到以上的效果,我想很多人都想知道是如何实现的,不急,我们慢慢来看,这个可不是能一口吃掉的螃蟹。

我先简单介绍一下以上效果图的业务流程,启动程序后,首先需要获取用户授权,假如已经授权过了,就不会出现提示用户输入登录的界面,授权成功后,直接获取微博数据,显示到微博列表当中。整个流程其实也蛮简单的,现在我们来看看代码。

/Wwj_sina_weibo/src/com/wwj/sina/weibo/ WeiboMain.java
这个类用来切换底部标签的,比较高的版本已经不推荐用这种方法实现,不过没关系,反正高版本兼容低版本。
package com.wwj.sina.weibo;import android.app.TabActivity;import android.content.Intent;import android.os.Bundle;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.TabHost;import android.widget.TabHost.TabSpec;/** * 主Activity * @author wwj * 通过点击RadioGroup下的RadioButton来切换不同界面 */@SuppressWarnings("deprecation")public class WeiboMain extends TabActivity public TabHost mTabhost; public static final String TAB_HOME = "TabHome"public static final String TAB_MSG = "TabMsg"public static final String TAB_SELF = "TabSelfInfo"public static final String TAB_DISCOVE = "TabDiscove"public static final String TAB_MORE = "TabMore"; RadioButton radio_button0; public static RadioGroup indexGroup; @SuppressWarnings("static-access"@Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  // 设置无标题  requestWindowFeature(getWindow().FEATURE_NO_TITLE);  this.setContentView(R.layout.tabbar);  radio_button0 = (RadioButton) this.findViewById(R.id.tabbar_home);  radio_button0.setChecked(true); // 设置首页按钮默认是按下状态  mTabhost = (TabHost) findViewById(android.R.id.tabhost); // 获取TabHost      // 设定标签、制定一个标签作为选项卡指示符  TabSpec tabSpec1 = mTabhost.newTabSpec(TAB_HOME).setIndicator(TAB_HOME);  // 指定一个加载activity的Intent对象作为选项卡内容  tabSpec1.setContent(new Intent(WeiboMain.this, HomeActivity.class));  mTabhost.addTab(tabSpec1); // 添加第一个子页  TabSpec tabSpec2 = mTabhost.newTabSpec(TAB_MSG).setIndicator(TAB_MSG);  tabSpec2.setContent(new Intent(WeiboMain.this, MessageActivity.class));  mTabhost.addTab(tabSpec2); // 添加第二个子页  TabSpec tabSpec3 = mTabhost.newTabSpec(TAB_SELF).setIndicator(TAB_SELF);  tabSpec3.setContent(new Intent(WeiboMain.this, SelfInfoActivity.class));  mTabhost.addTab(tabSpec3); // 添加第三个子页  TabSpec tabSpec4 = mTabhost.newTabSpec(TAB_DISCOVE).setIndicator(    TAB_DISCOVE);  tabSpec4.setContent(new Intent(WeiboMain.this, DiscoveActivity.class));  mTabhost.addTab(tabSpec4); // 添加第四个子页  TabSpec tabSpec5 = mTabhost.newTabSpec(TAB_MORE).setIndicator(TAB_MORE);  tabSpec5.setContent(new Intent(WeiboMain.this, MoreActivity.class));  mTabhost.addTab(tabSpec5); // 添加第一个子页  this.indexGroup = (RadioGroup) this.findViewById(R.id.main_radio);  // 实现RadioGroup的子选项点击监听  indexGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {   @Override   public void onCheckedChanged(RadioGroup group, int checkedId) {    switch (checkedId) {    case R.id.tabbar_home: // 首页     mTabhost.setCurrentTabByTag(TAB_HOME);     break;    case R.id.tabbar_message:// 信息     mTabhost.setCurrentTabByTag(TAB_MSG);     break;    case R.id.tabbar_me: // 个人资料     mTabhost.setCurrentTabByTag(TAB_SELF);     break;    case R.id.tabbar_discove: // 发现     mTabhost.setCurrentTabByTag(TAB_DISCOVE);     break;    case R.id.tabbar_more: // 更多     mTabhost.setCurrentTabByTag(TAB_MORE);    }   }  }); }}





/Wwj_sina_weibo/src/com/wwj/sina/weibo/ HomeActivity.java
这个Activity就是显示微博列表的界面,代码还不完善,这里只看关键点。
package com.wwj.sina.weibo;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.MenuItem;import android.view.MenuItem.OnMenuItemClickListener;import android.view.View;import android.view.View.OnClickListener;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;import com.weibo.net.Weibo;import com.wwj.sina.weibo.adapter.WeiboListAdapter;import com.wwj.sina.weibo.interfaces.Const;import com.wwj.sina.weibo.library.StorageManager;import com.wwj.sina.weibo.library.WeiboData;import com.wwj.sina.weibo.library.WeiboManager;import com.wwj.sina.weibo.listener.impl.StatusRequestListenerImpl;import com.wwj.sina.weibo.object.Status;import com.wwj.sina.weibo.object.User;import com.wwj.sina.weibo.util.Tools;import com.wwj.sina.weibo.view.PullToRefreshListView;import com.wwj.sina.weibo.view.PullToRefreshListView.OnRefreshListener;import com.wwj.sina.weibo.workqueue.DoneAndProcess;import com.wwj.sina.weibo.workqueue.WorkQueueMonitor;import com.wwj.sina.weibo.workqueue.task.ParentTask;import com.wwj.sina.weibo.workqueue.task.PullFileTask;/** * 主界面 *  * @author wwj 用于显示公共微博 */public class HomeActivity extends Activity implements Const, OnClickListener,  OnItemClickListener, OnItemLongClickListener, OnMenuItemClickListener,  DoneAndProcess public PullToRefreshListView weiboListView; // 自定义ListView private Weibo weibo; // 微博对象 public HomeData homeData; // 主界面数据 public TextView username; // 用户名,显示在标题栏 public Button btn_post_weibo; // 发布微博 public Button btn_reload; // 加载新微博 private LinearLayout linearLayoutHome; private Handler handler = new Handler() {  public void handleMessage(android.os.Message msg) {  }; }; // 微博列表主界面的数据 public static class HomeData {  public WeiboListAdapter weiboListAdapter;  public WorkQueueMonitor imageWorkQueueMonitor;  public WorkQueueMonitor taskWorkQueueMonitor;  public User user; } @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.home);  getWindow().setSoftInputMode(    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);  loadView();  getWindow().setBackgroundDrawable(null);  weibo = Tools.getWeibo(this);  // 获取微博对象  homeData = (HomeData) getLastNonConfigurationInstance();  if (homeData == null) {   homeData = new HomeData();   if (!(weibo == null || !weibo.isSessionValid())) {    @SuppressWarnings("unchecked")    List<Status> statuses = StorageManager.loadList(this,      Const.HOME);    if (statuses == null) {     statuses = WeiboManager.getHomeTimeline(this);    }    homeData.weiboListAdapter = WeiboData.loadWeiboListData(this,      Const.HOME, weiboListView, statuses);   }  } } @Override protected void onResume() {  super.onResume(); } @Override public Object onRetainNonConfigurationInstance() {  return homeData; } // 加载视图 private void loadView() {  weiboListView = (PullToRefreshListView) findViewById(R.id.weibolist);  linearLayoutHome = (LinearLayout) findViewById(R.id.ll_home_layout);  username = (TextView) this.findViewById(R.id.tv_home_name);  btn_post_weibo = (Button) this.findViewById(R.id.btn_home_post_weibo);  btn_reload = (Button) this.findViewById(R.id.btn_home_reload);  weiboListView.setOnItemClickListener(this);  btn_post_weibo.setOnClickListener(this);  btn_reload.setOnClickListener(this); } @Override public void onClick(View v) {  Intent intent = null;  GlobalObject globalObject = Tools.getGlobalObject(this);  switch (v.getId()) {  case R.id.btn_home_post_weibo: // 发布微博   intent = new Intent(HomeActivity.this, PostWeibo.class);   startActivity(intent);   break;  case R.id.btn_home_reload: // 刷新列表   long sinceId = homeData.weiboListAdapter.getMaxId() + 1;   WeiboManager.getHomeTimeline(this, sinceId, 0,     DEFAULT_STATUS_COUNT, true, new StatusRequestListenerImpl(       this, linearLayoutHome, HOME));   View homeReloadAnim = findViewById(R.id.pb_home_reload);   View homeReload = findViewById(R.id.btn_home_reload);   homeReloadAnim.setVisibility(View.VISIBLE);   homeReload.setVisibility(View.GONE);   break;  } } @Override public void doneProcess(ParentTask task) {  Message msg = new Message();  msg.obj = task;  if (task instanceof PullFileTask) {   msg.what &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值