Android新浪微博客户端(五)——主界面的TabHost和WeiboUtil

原文出自:方杰|http://fangjie.sinaapp.com/?p=183转载请注明出处

最终效果演示:http://fangjie.sinaapp.com/?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;
	}
}

欢迎各位关注我的个人站点:http://fangjie.sinaapp.com/

Android新浪微博客户端(五)——主界面的TabHost和WeiboUtil

时间: 2024-08-01 22:31:35

Android新浪微博客户端(五)——主界面的TabHost和WeiboUtil的相关文章

Android新浪微博客户端(六)——Home界面的ListView

原文出自:方杰|http://fangjie.sinaapp.com/?p=184转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 一.首先是ListView的adapter. 因为微博列表的Item不是规则的,比如说有些微博有转发子微博,有些没有,有些有图片,有些没有图片,所以说很不固定.这里就采用BaseAdapter,要自

Android新浪微博客户端(四)——添加多个账户及认证

原文出自:方杰| http://fangjie.sinaapp.com/?p=75 转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 二.获取用户信息并保存数据库 上面说到加载AuthActivity有两种情况,其中一种就是授权成功回调,在授权回调成功后我们就开始通过微博API获取用户信息了,然后保存数据库了.这一系列操作我采

Android新浪微博客户端(七)——ListView中的图片异步加载、缓存

原文出自:方杰|http://fangjie.sinaapp.com/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54该项目代码已经放到github:https://github.com/JayFang1993/SinaWeibo 一.ListView的图片异步加载 我们都知道对每一个Weibo Item都有用户头像,而且每一条微博还可能带有图片.如果在加载列表的同时加载图片,这样有几个缺点,第一很费事,界面卡住,用户体验很不

android-多种方式实现主界面的Tab

本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : ) 前言 使用Fragment实现 思路 效果 具体讲解 底部布局 顶部布局 Fragment的布局 Java控制代码 使用ViewPager实现 思路 效果 具体实现 使用ViewPagerFragmentPagerAdapter方法实现 思路 效果 补充 具体代码 使用框架 前言 这篇文章主要介绍多种方式实现主界面的tab,包括: (1)使用Fragment实现 (2)使用ViewPage实现 (3)

android 新浪微博客户端的表情功能的实现

这是一篇好文章,我转来收藏,技术的最高境界是分享. 最近在搞android 新浪微博客户端,有一些心得分享弄android客户端表情功能可以用以下思路1.首页把新浪的表情下载到本地一文件夹种,表情图片的命名要用新浪微博表情原来的命名比如 新浪的害羞表情是shame.gif 那么你在本地也得命名为shame.gif,命名相同主要是为了能够匹配表情对应的code.2.把本地的表情都放进android的资源文件里----drawable下面3.访问新浪的表情接口(新浪返回的数据类型有json和xml两

Android登录客户端,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

大家好,我是M1ko.在互联网时代的今天,如果一个App不接入互联网,那么这个App一定不会有长时间的生命周期,因此Android网络编程是每一个Android开发者必备的技能,博主是在校大学生,自学Android一年半多,正好通过一个模拟登录校园网软件,来给大家演示如何在网页上抓取我们想要的数据,以及将数据Post给服务器.如果有什么错误或改进欢迎大家指正=-= ,如果想交流博主qq 136057505 好的废话不多说看一下我们的重点 Httpwatch等软件抓取Post请求 如何获取验证码

Android聊天客户端Demo开源了.基本的聊天功能基本上都有了,数据库也已搭建,服务器用的baiduPush。可以直接拿来用!!。(希望两个手机通信的话,改一下pushid就可以)

Hello: 我是在飞,最近写了个聊天的Android客户端.今天将此demo分享出来.原澳门大家可以到github直接下载.有问题可以联系我. 几点说明: 1:android聊天客户端的demo,包含了im的基本功能. 1.1比如gif动态表情展示.语音.聊天表情.拍照.多图的发送.大图片的处理.listview缓存的处理等. 1.2数据库也已经搭载好,算是个完整项目,可以直接拿来用. 1.3服务器使用的是baidu push服务.(图片暂时没有处理上传服务器,只是上传了本地sdcard的pa

android开发新浪微博客户端 完整攻略 [新手必读]

开始接触学习android已经有3个礼拜了,一直都是对着android的sdk文档写Tutorials从Hello World到Notepad Tutorial算是初步入门了吧,刚好最近对微博感兴趣就打算开发个android版本的新浪微博客户端作为练手项目,并且以随笔的方式详细的记录开发的全过程.本人对java语言以及eclipse Ide都是初次应用基本上属于边学边用,做移动设备上的东西也是第一次,总的来说属于无基础.无经验.无天赋的纯三无人员,还请广大同学们多多给予指点. 开发第一件事情,那

四次元新浪微博客户端Android源码

四次元新浪微博客户端Android源码 下载地址:http://www.devstore.cn/code/info/213.html 运行截图:     热门源码下载: 高仿京东商城 Android快速开发不可或缺的11个工具类 Android快速开发框架LoonAndroid Android应用源码比较不错的新闻客户端 版权声明:本文为博主原创文章,未经博主允许不得转载.