原文出自:方杰|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;    }}

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)CountDownTimer
  3. Android通过Intent发送电子邮件含附件
  4. Android通过PHP连接MySQL(用到Json)
  5. Android发送短信解决字数限制问题
  6. Android(安卓)webview ajax session 问题
  7. android的一些知识小记
  8. STK解析--总框架
  9. android 中文 api (72) ―― BluetoothSocket[蓝牙]

随机推荐

  1. android中实现内容搜索
  2. Android(安卓)camera系统开发之IPC (四)
  3. 鑷紪Win8椋庢牸Android闊充箰鎾斁鍣
  4. Handler机制详述1---Handler的简介和用法
  5. 麦子学院android开发笔记:Android更换Rati
  6. Android之Gallery控件使用
  7. Xamarin向iOS和Android引入C# Async支持
  8. 在没有内置Google Map add-on的Android真
  9. [原] Android 自定义View步骤
  10. [置顶] Android 4.2 Wifi Display核心分