Android新浪微博客户端(五)——主界面的TabHost和WeiboUtil
原文出自:方杰|http://fangjie.info/?p=183转载请注明出处
最终效果演示:http://fangjie.info/?page_id=54
该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo
一.TabHost的实现
之前的一篇文章讲的就是TabHost,但是那个是用Fragment实现TabHost,这里我就尝试用另一种方式,继承TabActivity的方式实现TabHost。
MainActivity.java
public class MainActivity extends TabActivity{ private TabHost tabHost; private static final String HOME_TAB="home"; private static final String AT_TAB="at"; private static final String MSG_TAB="msg"; private static final String MORE_TAB="more"; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tabHost = this.getTabHost(); TabSpec homeSpec=tabHost.newTabSpec(HOME_TAB).setIndicator(HOME_TAB).setContent(new Intent(this,HomeActivity.class)); TabSpec atSpec=tabHost.newTabSpec(AT_TAB).setIndicator(AT_TAB).setContent(new Intent(this,AtActivity.class)); TabSpec msgSpec=tabHost.newTabSpec(MSG_TAB).setIndicator(MSG_TAB).setContent(new Intent(this,MsgActivity.class)); TabSpec moreSpec=tabHost.newTabSpec(MORE_TAB).setIndicator(MORE_TAB).setContent(new Intent(this,MoreActivity.class)); tabHost.addTab(homeSpec); tabHost.addTab(atSpec); tabHost.addTab(msgSpec); tabHost.addTab(moreSpec); tabHost.setCurrentTabByTag(HOME_TAB); RadioGroup radioGroup = (RadioGroup) this.findViewById(R.id.main_radio); final RadioButton rb=(RadioButton)this.findViewById(R.id.rb_home); rb.setBackgroundResource(R.drawable.tabhost_press); radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { rb.setBackgroundResource(R.drawable.tabhost_bg_selector); switch (checkedId) { case R.id.rb_home: tabHost.setCurrentTabByTag(HOME_TAB); break; case R.id.rb_at: tabHost.setCurrentTabByTag(AT_TAB); break; case R.id.rb_mess: tabHost.setCurrentTabByTag(MSG_TAB); break; case R.id.rb_more: tabHost.setCurrentTabByTag(MORE_TAB); break; default: break; } } }); } }
布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@android:id/tabhost"<!--注意这里 --> android:background="#ffffff" > <TabWidget android:id="@android:id/tabs"<!--注意这里 --> android:layout_width="fill_parent" android:layout_height="wrap_content" android:visibility="gone"/> <FrameLayout android:id="@android:id/tabcontent"<!--注意这里 --> android:layout_width="fill_parent" android:layout_height="fill_parent"/> <RadioGroup android:id="@+id/main_radio" android:layout_width="fill_parent" android:layout_height="48dp" android:layout_gravity="bottom" android:orientation="horizontal" android:background="@drawable/bar" > <RadioButton android:id="@+id/rb_home" android:drawableTop="@drawable/home_icon" style="@style/rg_style" android:text="主页" /> <RadioButton android:id="@+id/rb_at" android:drawableTop="@drawable/at_icon" style="@style/rg_style" android:text="我" /> <RadioButton android:id="@+id/rb_mess" android:drawableTop="@drawable/msg_icon" style="@style/rg_style" android:text="消息" /> <RadioButton android:id="@+id/rb_more" android:drawableTop="@drawable/more_icon" style="@style/rg_style" android:text="更多" /> </RadioGroup> </TabHost>
其中的每一个Tab选项的内容都是一个Activity,然后再去针对性的写每一个Tab下的内容。
二.WeiboAPI WeiboUtil.java
这个类的操作主要是发Http请求,然后解析数据,封装到bean中。这里我只写好了 读取所关注人的微博列表。下面的HttpRequest是我写的一个HTTP请求的方法,因为经常涉及到Http请求,就把这部分代码抽出来写成一个方法。
WeiboUtil.java的全部代码
package com.fangjie.weibo.util; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.fangjie.weibo.bean.User; import com.fangjie.weibo.bean.Weibo; public class WeiboUtil { public List<Weibo> getWeiboList(String token, long i) { List<Weibo> weibos=new ArrayList<Weibo>(); String url="https://api.weibo.com/2/statuses/home_timeline.json"; String params="access_token="+token+"&max_id="+i; String result=HttpRequest(1, url, params); try { JSONObject json_res=new JSONObject(result); JSONArray json_weibos=json_res.getJSONArray("statuses"); for(int j=0;j<json_weibos.length();j++) { Weibo weibo=new Weibo(); JSONObject json_weibo=json_weibos.getJSONObject(j); weibo.setComments_count(json_weibo.getInt("comments_count")); weibo.setContent(json_weibo.getString("text")); weibo.setFrom(json_weibo.getString("source")); weibo.setReposts_count(json_weibo.getInt("reposts_count")); weibo.setTime(json_weibo.getString("created_at")); weibo.setWid(json_weibo.getLong("id")); User user=new User(); JSONObject json_user=json_weibo.getJSONObject("user"); user.setUid(json_user.getLong("id")); user.setName(json_user.getString("screen_name")); user.setProfile_image_url(json_user.getString("profile_image_url")); user.setIsv(json_user.getBoolean("verified")); weibo.setUser(user); if(!json_weibo.isNull("thumbnail_pic")) weibo.setBmiddle_pic(json_weibo.getString("thumbnail_pic")); else weibo.setBmiddle_pic(""); if(!json_weibo.isNull("retweeted_status")) { Weibo zweibo=new Weibo(); JSONObject json_zweibo=json_weibo.getJSONObject("retweeted_status"); zweibo.setComments_count(json_zweibo.getInt("comments_count")); zweibo.setContent(json_zweibo.getString("text")); zweibo.setFrom(json_zweibo.getString("source")); zweibo.setReposts_count(json_zweibo.getInt("reposts_count")); zweibo.setTime(json_zweibo.getString("created_at")); zweibo.setWid(json_zweibo.getLong("id")); User zuser=new User(); JSONObject json_zuser=json_zweibo.getJSONObject("user"); zuser.setUid(json_zuser.getLong("id")); zuser.setName(json_zuser.getString("screen_name")); zuser.setProfile_image_url(json_zuser.getString("profile_image_url")); zuser.setIsv(json_zuser.getBoolean("verified")); zweibo.setUser(zuser); if(!json_zweibo.isNull("thumbnail_pic")) zweibo.setBmiddle_pic(json_zweibo.getString("thumbnail_pic")); else zweibo.setBmiddle_pic(""); weibo.setWeibo(zweibo); } else { weibo.setWeibo(null); } weibos.add(weibo); System.out.println(weibo.content); } } catch (JSONException e) { e.printStackTrace(); } return weibos; } //HTTP请求 way-0 Post way-1 Get public static String HttpRequest(int way,String url,String params) { String result = ""; BufferedReader in = null; PrintWriter out = null; try { String urlNameString = url + "?" + params; System.out.println(urlNameString); URL realUrl = new URL(urlNameString); URLConnection connection; if(way==0) { // 打开和URL之间的连接 connection= realUrl.openConnection(); // 发送POST请求必须设置如下两行 connection.setDoOutput(true); connection.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(connection.getOutputStream()); // 发送请求参数 out.print(params); // flush输出流的缓冲 out.flush(); } else { // 打开和URL之间的连接 connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 //connection.connect(); } // 定义 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } }
Android新浪微博客户端(五)——主界面的TabHost和WeiboUtil的更多相关文章
- android 新浪微博客户端的表情功能的实现
这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片 ...
- 实现 在子界面的button按下,在主界面的label显示。
不知道理解的对不对,反正功能是实现了. 这是子界面,COM口配置界面的 .H文件的定义.下面的Private:定义了Ui:MainWindow *main_ui;的指针变量 要 注 ...
- Android新浪微博客户端(六)——Home界面的ListView
原文出自:方杰|http://fangjie.info/?p=184转载请注明出处 最终效果演示:http://fangjie.info/?page_id=54该项目代码已经放到github:http ...
- Android新浪微博客户端(一)——主框架搭建
原文出自:方杰| http://fangjie.info/?p=62 转载请注明出处 提前声明的是,我是按照Ivan的这套教程学下来的. 首先,对于任何应用我们都需要建立一套消息处理机制,就是当用户在 ...
- Android新浪微博客户端(七)——ListView中的图片异步加载、缓存
原文出自:方杰|http://fangjie.info/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到git ...
- Android新浪微博客户端(四)——添加多个账户及认证
原文出自:方杰| http://fangjie.info/?p=75转载请注明出处 二.获取用户信息并保存数据库 上面说到加载AuthActivity有两种情况,其中一种就是授权成功回调,在授权回调成 ...
- Android新浪微博客户端(二)——添加多个账户及认证
原文出自:方杰| http://fangjie.info/?p=69 转载请注明出处 先看下实现效果: 欢迎界面: 第一次进入登录界面登录由于在登录界面没有已授权用户信息,所以自动跳转到授权界面. ...
- Android新浪微博客户端(三)——添加多个账户及认证
原文出自:方杰|http://fangjie.info/?p=72 转载请注明出处 一.微博OAuth2.0认证 首先来说说授权过程,我这里授权是通过SDK的,先添加SDK的jar包,微博SDK的de ...
- android 在fragment中获取界面的UI组件
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanc ...
随机推荐
- [转] 怎样快速而优雅地遍历 JavaScript 数组
我们一般用循环来遍历数组,而循环一直是 JavaScript 性能问题的常见来源,有时循环用得不好会严重降低代码的运行速度.例如,遍历数组时,我们会很自然地写出下面这种代码: // 未优化的代码1 v ...
- 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析
本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...
- Django初探--开发环境搭建(笔记)
1. Django框架的安装 (1) 下载Django源码 Django-1.7.11.tar.gz,并解压,网址:https://www.djangoproject.com/download/ (2 ...
- OD: Kernel Exploit - 2 Programming
本节接前方,对 exploitme.sys 进行利用. exploitme.sys 存在任意地址写任意内容的内核漏洞,现在采用执行 Ring0 Shellcode 的方式进行利用. 获取 HalDis ...
- scrolView
禁止UIScrollView垂直方向滚动,只允许水平方向滚动 scrollview.contentSize = CGSizeMake(长度, 0); 禁止UIScrollView水平方向滚动,只允许 ...
- iOS 中Window优先级的问题
在项目中,视频播放时候遇到网络切换需要弹出AlertView提醒用户,忽然发现转屏的时候播放View加到KeyWindow的时候把AleryView挡住了.如图 因为转屏的时候视图是直接加载到 [UI ...
- 了解<hx>标签,为你的网页添加标题
文章的段落用<p>标签,那么文章的标题用什么标签呢?在本节我们将使用<hx>标签来制作文章的标题.标题标签一共有6个,h1.h2.h3.h4.h5.h6分别为一级标题.二级标题 ...
- java解析JSON (使用net.sf.json)
例如JSON字符串str如下: { "data": [ { "basic_title": "运筹帷幄因 ...
- C++ Primer 5th 第13章 拷贝控制
当一个对象的引用或者指针离开作用域时,析构函数不会执行. 构造函数有初始化部分(初始化列表)和函数体. 析构函数有析构部分和函数,但析构函数的析构部分是隐式的.
- ftp文件操作
PHP FTP操作类( 上传.拷贝.移动.删除文件/创建目录 ) 2016-06-01 PHP编程 /** * 作用:FTP操作类( 拷贝.移动.删除文件/创建目录 ) */ class class_ ...