转载请标明出处: http://blog.csdn.net/android_ls/article/details/9276037 声明:仿人人项目,所用所有图片资源都来源于其它Android移动应用,编写本应用的目的在于学习交流,如涉及侵权请告知,我会及时换掉用到的相关图片。

这一篇基于Android仿人人客户端(v5.7.1)——个人主页(一),在上一篇的基础上继续完善。先看下之前完成的新鲜事界面效果图,这篇要聊的是在之前的新鲜事主界面,点击好友图像进入好友个人主页的进一步实现,下面我们就一步一的进行完善好友个人主页的功能。

一、实现好友的个人主页,对新鲜事的过滤处理。

1、为顶部下拉菜单准备数据

a. 在strings.xml文件中,添加字符串数组:

     <string-array name="personal_homepage_filter_list">        <item>最近来访</item>        <item>新鲜事</item>        <item>资料</item>        <item>相册</item>        <item>状态</item>        <item>日志</item>        <item>分享</item>    </string-array>
b.准备相应的Item图标,代码如下:

/**     * 顶部下拉列表的操作指示图标Id数组     */    private int[] mIcons = {             R.drawable.v5_0_1_profile_popupwindow_type_visitor_background,            R.drawable.v5_0_1_profile_popupwindow_type_minifeed_background,            R.drawable.v5_0_1_profile_popupwindow_type_info_background,            R.drawable.v5_0_1_profile_popupwindow_type_album_background,            R.drawable.v5_0_1_profile_popupwindow_type_status_background,            R.drawable.v5_0_1_profile_popupwindow_type_blog_background,            R.drawable.v5_0_1_profile_popupwindow_type_share_background};
2、初始化顶部下拉菜单,代码如下:

        View view = mInflater.inflate(R.layout.fresh_news_popupwindow, null);        mPopupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, true);        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());        mPopupWindow.setAnimationStyle(R.style.fresh_news_popup_animation);        mPopupListView = (ListView) view.findViewById(R.id.popup_listview);        mTexts = this.getResources().getStringArray(R.array.personal_homepage_filter_list);        mPopupAdapter = new FreshNewsPopupAdapter(this, mIcons, mTexts);        mPopupListView.setAdapter(mPopupAdapter);
3、运行效果图如下:



4、添加顶部下拉菜单的Item事件处理,实现对新鲜事类型的过滤。

        // 设置顶部下拉菜单的Item事件处理        mPopupListView.setOnItemClickListener(new OnItemClickListener() {            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                mPopupWindow.dismiss();                // 当前选择的项与之前的一样,则不做处理。                if (mPopupAdapter.getPosition() == position) {                    return;                }                // 新鲜事过滤事件处理                fresh_news_type = freshNewsTypes[position];                LogUtil.i(TAG, "onItemClick position = " + position);                LogUtil.i(TAG, "onItemClick fresh_news_type = " + fresh_news_type);                mPopupAdapter.setPosition(position);                mPopupAdapter.notifyDataSetChanged();                                topMenuNavbar.tvTitle.setText(mTexts[position]);                                if(PERSONAL_HOMEPAGE_TYPE_LATELY.equals(fresh_news_type))                {                    // 最近来访                }                 else if(PERSONAL_HOMEPAGE_TYPE_DATA.equals(fresh_news_type))                {                     // 资料                                    } else {                    page = 1;                    mFreshNewsList.clear();                    getFreshNews();                }            }        });
新鲜事的类型分为以下几种,代码如下:

 /**     * 发表的新鲜事,默认请求所有类型的新鲜事     */    private static final String FRESH_NEWS_TYPE_ALL = "10,11,20,21,22,23,30,31,32,33,34,35,36";    /**     * 照片(相册)     */    private static final String FRESH_NEWS_TYPE_PHOTO = "30,31";    /**     * 状态     */    private static final String FRESH_NEWS_TYPE_STATUS = "10,11";    /**     * 日志     */    private static final String FRESH_NEWS_TYPE_BLOG = "20,22";    /**     * 分享的新鲜事     */    private static final String FRESH_NEWS_TYPE_SHARE = "21,23,32,33,36";        /**     * 最近来访     */    private static final String PERSONAL_HOMEPAGE_TYPE_LATELY = "1";        /**     * 资料     */    private static final String PERSONAL_HOMEPAGE_TYPE_DATA = "2";        /**     * 新鲜事类型数组     */    private String[] freshNewsTypes = {             PERSONAL_HOMEPAGE_TYPE_LATELY,            FRESH_NEWS_TYPE_ALL,             PERSONAL_HOMEPAGE_TYPE_DATA,            FRESH_NEWS_TYPE_PHOTO,            FRESH_NEWS_TYPE_STATUS,            FRESH_NEWS_TYPE_BLOG,            FRESH_NEWS_TYPE_SHARE};    /**     * 新鲜事类型,默认为当前所支持的全部类型     */    private String fresh_news_type = FRESH_NEWS_TYPE_ALL;
运行效果图如下:

好友个人主页(新鲜事)



好友个人主页(状态)



好友个人主页(相册)



好友个人主页(分享)



好友个人主页(日志)



二、实现好友的个人主页资料信息的获取和展示

1、配置用于显示资料信息UI布局文件(personal_homepage_user_basic.xml),代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:background="#FFFFFF"    android:orientation="vertical" >    <RelativeLayout        android:id="@+id/rl_friends"        android:layout_width="fill_parent"        android:layout_height="wrap_content"         android:background="@drawable/fresh_news_list_item_selector">        <TextView            android:id="@+id/tv_friends_count"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerVertical="true"            android:paddingBottom="10dip"            android:paddingLeft="20dip"            android:paddingTop="10dp"            android:textColor="#ff005092"            android:textSize="16sp" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:layout_centerVertical="true"            android:layout_marginRight="8dip"            android:src="@drawable/v5_0_1_profile_to_friend_list_img" />        <View            android:layout_width="fill_parent"            android:layout_height="1dip"            android:layout_below="@+id/tv_friends_count"            android:background="@drawable/v5_0_1_profile_header_divider" />    </RelativeLayout>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="15dip"        android:paddingTop="10dp"        android:text="基本信息"        android:textColor="#FF333333"        android:textSize="13sp" />    <View        android:layout_width="fill_parent"        android:layout_height="1.5dip"        android:background="@drawable/v5_0_1_profile_header_divider" />    <TextView        android:id="@+id/tv_renren_id"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="20dip"        android:paddingTop="10dp"        android:textColor="#80333333"        android:textSize="16sp" />    <View        android:layout_width="fill_parent"        android:layout_height="1dip"        android:background="@drawable/v5_0_1_profile_header_divider" />    <TextView        android:id="@+id/tv_gender"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="20dip"        android:paddingTop="10dp"        android:textColor="#80333333"        android:textSize="16sp" />    <View        android:layout_width="fill_parent"        android:layout_height="1dip"        android:background="@drawable/v5_0_1_profile_header_divider" />    <TextView        android:id="@+id/tv_birth"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="20dip"        android:paddingTop="10dp"        android:textColor="#80333333"        android:textSize="16sp" />    <View        android:layout_width="fill_parent"        android:layout_height="1dip"        android:background="@drawable/v5_0_1_profile_header_divider" />    <TextView        android:id="@+id/tv_hometown"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="20dip"        android:paddingTop="10dp"        android:textColor="#80333333"        android:textSize="16sp" />    <View        android:layout_width="fill_parent"        android:layout_height="1dip"        android:background="@drawable/v5_0_1_profile_header_divider" />    <TextView        android:id="@+id/tv_network"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:paddingBottom="10dip"        android:paddingLeft="20dip"        android:paddingTop="10dp"        android:textColor="#80333333"        android:textSize="16sp" /></LinearLayout>
2、将的基本信息资料显示组件,添加到ListVew的 FooterView。代码如下:

        mBasicInfoView = (LinearLayout) mInflater.inflate(R.layout.personal_homepage_user_basic, null);        mBasicInfoView.setVisibility(View.GONE);        mListView.addFooterView(mBasicInfoView);
3、获取 基本信息资料显示的各个组件,代码如下:

        tvRenrenId = (TextView) mBasicInfoView.findViewById(R.id.tv_renren_id);        tvGender = (TextView) mBasicInfoView.findViewById(R.id.tv_gender);        tvBirth = (TextView) mBasicInfoView.findViewById(R.id.tv_birth);        tvHometown = (TextView) mBasicInfoView.findViewById(R.id.tv_hometown);        tvNetwork = (TextView) mBasicInfoView.findViewById(R.id.tv_network);
4、修改 获取用户个人主页信息的网络请求方法,代码如下:

    /**     * 获取用户个人主页的信息     */    public void getProfileInfo() {        String accessToken = mAuthTokenManager.getAccessToken();        LogUtil.e(TAG, "accessToken = " + accessToken);        Map<String, String> parameter = new HashMap<String, String>();        parameter.put("v", "1.0"); // API的版本号,固定值为1.0         parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。        parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML        parameter.put("call_id", "1.0"); // 请求队列号        parameter.put("method", "users.getProfileInfo");        parameter.put("uid", uid + ""); // 个人主页用户的Id         parameter.put("fields", "base_info,status,friends_count"); // 需要获取的信息的字段列表,各个字段用逗号隔开。        AsyncHttpsPost asyncHttpsPost = new AsyncHttpsPost(Constant.API_SERVER_URL, parameter, new ParseCallback() {            @Override            public Object parse(String json) throws JSONException {                LogUtil.i(TAG, "json = " + json);                final JSONObject jsonObject = new JSONObject(json);                mHandler.post(new Runnable() {                    @Override                    public void run() {                        String name = jsonObject.optString("name");                        LogUtil.i(TAG, "name = " + name);                        String headurl = jsonObject.optString("headurl");                        LogUtil.i(TAG, "headurl = " + headurl);                        int star = jsonObject.optInt("star");                        LogUtil.i(TAG, "star = " + star);                        JSONObject jsonStatus = jsonObject.optJSONObject("status");                        String status = jsonStatus.optString("content");                        LogUtil.i(TAG, "status = " + status);                        tvName.setText(name);                        tvStatusContent.setText(status);                        if (star == 1) {                            ivStar.setVisibility(View.VISIBLE);                        }                        // 加载用户图像                        /*ImageInfo imgInfo = new ImageInfo(ivIconView, headurl);                        new ImageLoader(PersonalHomepageActivity.this).displayImage(imgInfo);*/                        int friends_count = jsonObject.optInt("friends_count");                        LogUtil.i(TAG, "friends_count = " + friends_count);                        tvFriendsCount.setText(friends_count + "个好友");                                                int uid = jsonObject.optInt("uid");                        LogUtil.i(TAG, "uid = " + uid);                                                String network_name = jsonObject.optString("network_name");                        LogUtil.i(TAG, "network_name = " + network_name);                                                JSONObject jsonBaseInfo = jsonObject.optJSONObject("base_info");                        JSONObject jsonBirth = jsonBaseInfo.optJSONObject("birth");                        JSONObject jsonHometown = jsonBaseInfo.optJSONObject("hometown");                                                int gender = jsonBaseInfo.optInt("gender");                        LogUtil.i(TAG, "gender = " + gender);                                                String birth_month = jsonBirth.optString("birth_month");                        LogUtil.i(TAG, "birth_month = " + birth_month);                                                String birth_day = jsonBirth.optString("birth_day");                        LogUtil.i(TAG, "birth_day = " + birth_day);                                                String birth_year = jsonBirth.optString("birth_year");                        LogUtil.i(TAG, "birth_year = " + birth_year);                                                String province = jsonHometown.optString("province");                        LogUtil.i(TAG, "province = " + province);                                                String city = jsonHometown.optString("city");                        LogUtil.i(TAG, "city = " + city);                                                String sexString = "男";                        if(gender == 0){                            sexString = "女";                        }                                                tvRenrenId.setText("人人ID:" + uid);                        tvGender.setText("性别:" + sexString);                        tvBirth.setText("生日:" + birth_year + "年" + birth_month + "月" + birth_day + "日");                        tvHometown.setText("家乡:" + province + " " + city);                        tvNetwork.setText("网络:" + network_name);                                            }                });                return null;            }        }, new ResultCallback() {            @Override            public void onSuccess(final Object obj) {                /* {                      "uid":221659942,                      "status":{"content":"我才知道草莓翻转,是这个意思(偷笑) 转自谭静:明天最后一门考试,结束后,就真的迎来暑假啦~~哇卡卡卡~~~下学期也终于木有课了~~~(twg)(大笑)(ys)(流口水)","time":"2013-07-02 14:37:01"},                      "star":1,                      "network_name":"西北大学",                      "headurl":"http://hdn.xnimg.cn/photos/hdn421/20130614/1350/tiny_cm9Q_ec73000461fa113e.jpg",                      "name":"谭静",                      "base_info":{"birth":{"birth_month":3,"birth_day":21,"birth_year":"1987"},"hometown":{"province":"河北","city":"唐山市"},"gender":0}                   }*/            }            @Override            public void onFail(int errorCode) {                LogUtil.i(TAG, "freshNewsList errorCode = " + errorCode);            }        });        mDefaultThreadPool.execute(asyncHttpsPost);        mAsyncRequests.add(asyncHttpsPost);    }
5、在顶部下拉菜单Item点击事件处理器( public void onItemClick(AdapterView<?> parent, View view, int position, long id) { })中,添加相应的处理。代码如下:

                else if(PERSONAL_HOMEPAGE_TYPE_DATA.equals(fresh_news_type))                {                     // 资料                    tvType.setText("好友信息");                    mBasicInfoView.setVisibility(View.VISIBLE);                                        page = 1;                    mFreshNewsList.clear();                    mListView.setPullLoadEnable(false);                    mListView.setPullRefreshEnable(false);                    mFreshNewsAdapter.notifyDataSetChanged();                } else {                    mBasicInfoView.setVisibility(View.GONE);                                        page = 1;                    mFreshNewsList.clear();                    getFreshNews();                }
6、运行效果图如下:



三、个人(好友)主页界面到目前为止,完整的代码如下:

package com.everyone.android.ui;import java.text.SimpleDateFormat;import java.util.HashMap;import java.util.LinkedList;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.FrameLayout.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.everyone.android.R;import com.everyone.android.api.NetworkBaseActivity;import com.everyone.android.bitmap.ImageLoader;import com.everyone.android.callback.ParseCallback;import com.everyone.android.callback.ResultCallback;import com.everyone.android.entity.FreshNews;import com.everyone.android.entity.ImageInfo;import com.everyone.android.net.AsyncBaseRequest;import com.everyone.android.net.AsyncHttpsPost;import com.everyone.android.ui.freshnews.FreshNewsAdapter;import com.everyone.android.ui.freshnews.FreshNewsPopupAdapter;import com.everyone.android.utils.Constant;import com.everyone.android.utils.LogUtil;import com.everyone.android.widget.TopMenuNavbar;import com.everyone.android.widget.XListView;import com.everyone.android.widget.XListView.IXListViewListener;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;/** * 功能描述:个人主页(当前登录用户的个人主页或者好友的个人主页) * @author android_ls */public class PersonalHomepageActivity extends NetworkBaseActivity implements IXListViewListener, OnClickListener {    /**     * LOG打印标签     */    private static final String TAG = PersonalHomepageActivity.class.getSimpleName();        private TopMenuNavbar topMenuNavbar;    private XListView mListView;    private FreshNewsAdapter mFreshNewsAdapter;    /**     * 新鲜事信息集合     */    private LinkedList<FreshNews> mFreshNewsList = new LinkedList<FreshNews>();    /**     * 用户信息唯一标识     */    private int uid;    /**     * 每一页记录数,默认值为30,最大50      */    private int pageCount = 30;    /**     * 当前获取第几页,默认值为1     */    private int page = 1;    private LayoutInflater mInflater;    // 用户图像    private ImageView ivIconView;    // 用户名    private TextView tvName;    // 表示该用户是否为星级用户 1表示该用户是星级用户,0表示否    private ImageView ivStar;    // 用户状态信息    private TextView tvStatusContent;    // 是否为VIP用户    private Button btnVip;        /**     * 显示当前过滤的信息所属的类型     */    private TextView tvType;        /**     * 指定信息类型的总数     */    private TextView tvTypeCount;    /**     * 发表的新鲜事,默认请求所有类型的新鲜事     */    private static final String FRESH_NEWS_TYPE_ALL = "10,11,20,21,22,23,30,31,32,33,34,35,36";    /**     * 照片(相册)     */    private static final String FRESH_NEWS_TYPE_PHOTO = "30,31";    /**     * 状态     */    private static final String FRESH_NEWS_TYPE_STATUS = "10,11";    /**     * 日志     */    private static final String FRESH_NEWS_TYPE_BLOG = "20,22";    /**     * 分享的新鲜事     */    private static final String FRESH_NEWS_TYPE_SHARE = "21,23,32,33,36";        /**     * 最近来访     */    private static final String PERSONAL_HOMEPAGE_TYPE_LATELY = "1";        /**     * 资料     */    private static final String PERSONAL_HOMEPAGE_TYPE_DATA = "2";        /**     * 新鲜事类型数组     */    private String[] freshNewsTypes = {             PERSONAL_HOMEPAGE_TYPE_LATELY,            FRESH_NEWS_TYPE_ALL,             PERSONAL_HOMEPAGE_TYPE_DATA,            FRESH_NEWS_TYPE_PHOTO,            FRESH_NEWS_TYPE_STATUS,            FRESH_NEWS_TYPE_BLOG,            FRESH_NEWS_TYPE_SHARE};    /**     * 新鲜事类型,默认为当前所支持的全部类型     */    private String fresh_news_type = FRESH_NEWS_TYPE_ALL;    private PopupWindow mPopupWindow;    /**     * 顶部下拉列表     */    private ListView mPopupListView;    /**     * 顶部下拉列表数据适配器     */    private FreshNewsPopupAdapter mPopupAdapter;    /**     * 顶部下拉列表的操作提示文本数组     */    private String[] mTexts;    /**     * 顶部下拉列表的操作指示图标Id数组     */    private int[] mIcons = {             R.drawable.v5_0_1_profile_popupwindow_type_visitor_background,            R.drawable.v5_0_1_profile_popupwindow_type_minifeed_background,            R.drawable.v5_0_1_profile_popupwindow_type_info_background,            R.drawable.v5_0_1_profile_popupwindow_type_album_background,            R.drawable.v5_0_1_profile_popupwindow_type_status_background,            R.drawable.v5_0_1_profile_popupwindow_type_blog_background,            R.drawable.v5_0_1_profile_popupwindow_type_share_background};    private LinearLayout mBasicInfoView;    private TextView tvRenrenId;    private TextView tvGender;    private TextView tvBirth;    private TextView tvHometown;    private TextView tvNetwork;        private RelativeLayout rlFriends;    private TextView tvFriendsCount;        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setupPopupWindow();    }    @Override    protected int getLayoutId() {        return R.layout.personal_homepage;    }    private void setupPopupWindow() {        View view = mInflater.inflate(R.layout.fresh_news_popupwindow, null);        mPopupWindow = new PopupWindow(view, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, true);        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());        mPopupWindow.setAnimationStyle(R.style.fresh_news_popup_animation);        mPopupListView = (ListView) view.findViewById(R.id.popup_listview);        mTexts = this.getResources().getStringArray(R.array.personal_homepage_filter_list);        mPopupAdapter = new FreshNewsPopupAdapter(this, mIcons, mTexts);        mPopupListView.setAdapter(mPopupAdapter);                // 设置默认选中新鲜事项        fresh_news_type = freshNewsTypes[1];        mPopupAdapter.setPosition(1);        mPopupAdapter.notifyDataSetChanged();        topMenuNavbar.tvTitle.setText(mTexts[1]);                // 设置顶部下拉菜单的Item事件处理        mPopupListView.setOnItemClickListener(new OnItemClickListener() {            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                mPopupWindow.dismiss();                // 当前选择的项与之前的一样,则不做处理。                if (mPopupAdapter.getPosition() == position) {                    return;                }                // 新鲜事过滤事件处理                fresh_news_type = freshNewsTypes[position];                LogUtil.i(TAG, "onItemClick position = " + position);                LogUtil.i(TAG, "onItemClick fresh_news_type = " + fresh_news_type);                mPopupAdapter.setPosition(position);                mPopupAdapter.notifyDataSetChanged();                                topMenuNavbar.tvTitle.setText(mTexts[position]);                tvType.setText(mTexts[position]);                                if(PERSONAL_HOMEPAGE_TYPE_LATELY.equals(fresh_news_type))                {                    // 最近来访                    Toast.makeText(PersonalHomepageActivity.this.getApplicationContext(), "抱歉,您选择的项官方API暂时未提供如何获取相应的数据!", Toast.LENGTH_LONG).show();                }                 else if(PERSONAL_HOMEPAGE_TYPE_DATA.equals(fresh_news_type))                {                     // 资料                    tvType.setText("好友信息");                    mBasicInfoView.setVisibility(View.VISIBLE);                                        page = 1;                    mFreshNewsList.clear();                    mListView.setPullLoadEnable(false);                    mListView.setPullRefreshEnable(false);                    mFreshNewsAdapter.notifyDataSetChanged();                } else {                    mBasicInfoView.setVisibility(View.GONE);                                        page = 1;                    mFreshNewsList.clear();                    getFreshNews();                }            }        });    }        @Override    protected void setupViews() {        topMenuNavbar = (TopMenuNavbar) this.findViewById(R.id.rl_top_menu_navbar);        topMenuNavbar.tvRightOperationName.setVisibility(View.GONE);        topMenuNavbar.ivRightLine.setVisibility(View.GONE);        // 将顶部左侧的menu图标换成back图标        LinearLayout llBackMenu = topMenuNavbar.llShowMenu;        ImageView ivBack = (ImageView) llBackMenu.findViewById(R.id.iv_back);        ivBack.setImageResource(R.drawable.v5_0_1_flipper_head_back);        // 将顶部右侧的刷新按钮换成下拉菜单图标        LinearLayout llDownOperation = topMenuNavbar.mLlRefresh;        ImageView ivOperation = (ImageView) llDownOperation.findViewById(R.id.iv_refresh);        ivOperation.setImageResource(R.drawable.v5_0_1_flipper_head_menu);        llBackMenu.setOnClickListener(this);        llDownOperation.setOnClickListener(this);        topMenuNavbar.mLlDownList.setOnClickListener(this);        mListView = (XListView) this.findViewById(R.id.listview);        mListView.setPullLoadEnable(false);        mListView.setPullRefreshEnable(false);        mListView.setXListViewListener(this);        // HeadView组件        mInflater = LayoutInflater.from(this.getContext());        LinearLayout mHeadView = (LinearLayout) mInflater.inflate(R.layout.personal_homepage_head, null);        mListView.addHeaderView(mHeadView);        // 用户基本信息组件        mBasicInfoView = (LinearLayout) mInflater.inflate(R.layout.personal_homepage_user_basic, null);        mBasicInfoView.setVisibility(View.GONE);        mListView.addFooterView(mBasicInfoView);                mFreshNewsAdapter = new FreshNewsAdapter(this, mFreshNewsList);        mListView.setAdapter(mFreshNewsAdapter);        tvName = (TextView) mHeadView.findViewById(R.id.tv_name);        ivIconView = (ImageView) mHeadView.findViewById(R.id.iv_icon);        ivStar = (ImageView) mHeadView.findViewById(R.id.iv_star);        tvStatusContent = (TextView) mHeadView.findViewById(R.id.tv_status_content);        btnVip = (Button) mHeadView.findViewById(R.id.btn_vip);        tvType = (TextView) mHeadView.findViewById(R.id.tv_type);        tvTypeCount = (TextView) mHeadView.findViewById(R.id.tv_type_count);                tvRenrenId = (TextView) mBasicInfoView.findViewById(R.id.tv_renren_id);        tvGender = (TextView) mBasicInfoView.findViewById(R.id.tv_gender);        tvBirth = (TextView) mBasicInfoView.findViewById(R.id.tv_birth);        tvHometown = (TextView) mBasicInfoView.findViewById(R.id.tv_hometown);        tvNetwork = (TextView) mBasicInfoView.findViewById(R.id.tv_network);                // 好友的数量        rlFriends = (RelativeLayout) mBasicInfoView.findViewById(R.id.rl_friends);        tvFriendsCount = (TextView) mBasicInfoView.findViewById(R.id.tv_friends_count);        rlFriends.setOnClickListener(this);    }    @Override    protected void initialized() {        // TODO Auto-generated method stub        uid = this.getIntent().getIntExtra("actor_id", -1);        LogUtil.i(TAG, "uid = " + uid);        getProfileInfo();        getUserImage();        getFreshNews();    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        switch (v.getId()) {        case R.id.ll_back:            onBackPressed();            break;        case R.id.ll_down_list:            if (mPopupWindow != null) {                mPopupWindow.showAsDropDown(topMenuNavbar);            }            break;        case R.id.rl_friends:            // 切换到好友列表界面                        break;         default:            break;        }    }    // 下拉刷新    @Override    public void onRefresh() {        page = 1;        getFreshNews();    }    // 加载更多    @Override    public void onLoadMore() {        page++;        getFreshNews();    }        /**     * 获取用户个人主页的信息     */    public void getProfileInfo() {        String accessToken = mAuthTokenManager.getAccessToken();        LogUtil.e(TAG, "accessToken = " + accessToken);        Map<String, String> parameter = new HashMap<String, String>();        parameter.put("v", "1.0"); // API的版本号,固定值为1.0         parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。        parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML        parameter.put("call_id", "1.0"); // 请求队列号        parameter.put("method", "users.getProfileInfo");        parameter.put("uid", uid + ""); // 个人主页用户的Id         parameter.put("fields", "base_info,status,friends_count"); // 需要获取的信息的字段列表,各个字段用逗号隔开。        AsyncHttpsPost asyncHttpsPost = new AsyncHttpsPost(Constant.API_SERVER_URL, parameter, new ParseCallback() {            @Override            public Object parse(String json) throws JSONException {                LogUtil.i(TAG, "getProfileInfo() json = " + json);                final JSONObject jsonObject = new JSONObject(json);                mHandler.post(new Runnable() {                    @Override                    public void run() {                        String name = jsonObject.optString("name");                        LogUtil.i(TAG, "name = " + name);                        String headurl = jsonObject.optString("headurl");                        LogUtil.i(TAG, "headurl = " + headurl);                        int star = jsonObject.optInt("star");                        LogUtil.i(TAG, "star = " + star);                        JSONObject jsonStatus = jsonObject.optJSONObject("status");                        String status = jsonStatus.optString("content");                        LogUtil.i(TAG, "status = " + status);                        tvName.setText(name);                        tvStatusContent.setText(status);                        if (star == 1) {                            ivStar.setVisibility(View.VISIBLE);                        }                        // 加载用户图像                        /*ImageInfo imgInfo = new ImageInfo(ivIconView, headurl);                        new ImageLoader(PersonalHomepageActivity.this).displayImage(imgInfo);*/                        int friends_count = jsonObject.optInt("friends_count");                        LogUtil.i(TAG, "friends_count = " + friends_count);                        tvFriendsCount.setText(friends_count + "个好友");                                                int uid = jsonObject.optInt("uid");                        LogUtil.i(TAG, "uid = " + uid);                                                String network_name = jsonObject.optString("network_name");                        LogUtil.i(TAG, "network_name = " + network_name);                                                JSONObject jsonBaseInfo = jsonObject.optJSONObject("base_info");                        JSONObject jsonBirth = jsonBaseInfo.optJSONObject("birth");                        JSONObject jsonHometown = jsonBaseInfo.optJSONObject("hometown");                                                int gender = jsonBaseInfo.optInt("gender");                        LogUtil.i(TAG, "gender = " + gender);                                                String birth_month = jsonBirth.optString("birth_month");                        LogUtil.i(TAG, "birth_month = " + birth_month);                                                String birth_day = jsonBirth.optString("birth_day");                        LogUtil.i(TAG, "birth_day = " + birth_day);                                                String birth_year = jsonBirth.optString("birth_year");                        LogUtil.i(TAG, "birth_year = " + birth_year);                                                String province = jsonHometown.optString("province");                        LogUtil.i(TAG, "province = " + province);                                                String city = jsonHometown.optString("city");                        LogUtil.i(TAG, "city = " + city);                                                String sexString = "男";                        if(gender == 0){                            sexString = "女";                        }                                                tvRenrenId.setText("人人ID:" + uid);                        tvGender.setText("性别:" + sexString);                        tvBirth.setText("生日:" + birth_year + "年" + birth_month + "月" + birth_day + "日");                        tvHometown.setText("家乡:" + province + " " + city);                        tvNetwork.setText("网络:" + network_name);                                            }                });                return null;            }        }, new ResultCallback() {            @Override            public void onSuccess(final Object obj) {                /* {                      "uid":221659942,                      "status":{"content":"我才知道草莓翻转,是这个意思(偷笑) 转自谭静:明天最后一门考试,结束后,就真的迎来暑假啦~~哇卡卡卡~~~下学期也终于木有课了~~~(twg)(大笑)(ys)(流口水)","time":"2013-07-02 14:37:01"},                      "star":1,                      "network_name":"西北大学",                      "headurl":"http://hdn.xnimg.cn/photos/hdn421/20130614/1350/tiny_cm9Q_ec73000461fa113e.jpg",                      "name":"谭静",                      "base_info":{"birth":{"birth_month":3,"birth_day":21,"birth_year":"1987"},"hometown":{"province":"河北","city":"唐山市"},"gender":0}                   }*/            }            @Override            public void onFail(int errorCode) {                LogUtil.i(TAG, "freshNewsList errorCode = " + errorCode);            }        });        mDefaultThreadPool.execute(asyncHttpsPost);        mAsyncRequests.add(asyncHttpsPost);    }    /**     * 获取用户的图像     * @param uid 用户Id     */    public void getUserImage() {        String accessToken = mAuthTokenManager.getAccessToken();        LogUtil.e(TAG, "accessToken = " + accessToken);        // 获取用户信息所需的参数        Map<String, String> parameter = new HashMap<String, String>();        parameter.put("v", "1.0"); // API的版本号,固定值为1.0         parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。        parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML,推荐使用JSON,缺省值为XML         parameter.put("call_id", "1.0"); // 请求队列号         parameter.put("method", "users.getInfo"); // 你要访问那个接口,我们肯定调用用获取用户的信息的接口咯,该接口支持批量获取。        parameter.put("uids", uid + ""); // 个人主页用户的Id         parameter.put("fields", "zidou,vip,mainurl"); // 返回的字段列表,可以指定返回那些字段,用逗号分隔。        AsyncBaseRequest asyncHttpsPost = new AsyncHttpsPost(Constant.API_SERVER_URL, parameter, new ParseCallback() {            @Override            public Object parse(String json) throws JSONException {                LogUtil.i(TAG, "getUserImage() json = " + json);                JSONArray jsonArray = new JSONArray(json);                JSONObject jsonObject = jsonArray.getJSONObject(0);                // 是否为vip用户,值1表示是;值0表示不是                 final int zidou = jsonObject.optInt("zidou");                LogUtil.i(TAG, "zidou = " + zidou);                // 是否为vip用户等级,前提是zidou节点必须为1                 final int vip = jsonObject.optInt("vip");                LogUtil.i(TAG, "vip = " + vip);                String headurl = jsonObject.optString("mainurl");                LogUtil.i(TAG, "headurl = " + headurl);                if (TextUtils.isEmpty(headurl)) {                    LogUtil.i(TAG, "用户图像对应的URL为null");                    return null;                }                final String imageUrl = headurl;                mHandler.post(new Runnable() {                    @Override                    public void run() {                        if (zidou == 1) {                            btnVip.setVisibility(View.VISIBLE);                            btnVip.setText("VIP" + vip);                        }                        ImageInfo imgInfo = new ImageInfo(ivIconView, imageUrl);                        new ImageLoader(PersonalHomepageActivity.this).displayImage(imgInfo);                    }                });                return null;            }        }, new ResultCallback() {            @Override            public void onSuccess(Object obj) {                // 正常情况下返回的JSON字符串                /*[                 {                     "uid":221659942,                     "vip":1,                     "mainurl":"http://hdn.xnimg.cn/photos/hdn221/20130614/1350/h_main_hIfE_e8e9000001ad113e.jpg",                     "zidou":0                  }                ]*/                // 异常情况下返回的JSON字符串                /* [                  {                      "uid":600038849,                      "tinyurl":"http://hdn.xnimg.cn/photos/hdn221/20110212/1700/h_tiny_2ZyG_4a320001f9f62f75.jpg",                      "vip":1,                      "sex":1,                      "name":"折翼の天使",                      "star":1,                      "headurl":"http://hdn.xnimg.cn/photos/hdn221/20110212/1700/h_head_jMyd_4a320001f9f62f75.jpg",                      "zidou":0                   }                 ]*/            }            @Override            public void onFail(int errorCode) {                // TODO Auto-generated method stub            }        });        mDefaultThreadPool.execute(asyncHttpsPost);        mAsyncRequests.add(asyncHttpsPost);    }    /**     * 向服务器端请求新鲜事的数据     */    public void getFreshNews() {        String accessToken = mAuthTokenManager.getAccessToken();        LogUtil.e(TAG, "accessToken = " + accessToken);        Map<String, String> parameter = new HashMap<String, String>();        parameter.put("v", "1.0"); // API的版本号,固定值为1.0         parameter.put("access_token", accessToken); // OAuth2.0验证授权后获得的token。        parameter.put("format", "JSON"); // 返回值的格式。请指定为JSON或者XML        parameter.put("call_id", "1.0"); // 请求队列号                parameter.put("method", "feed.get");        parameter.put("type", fresh_news_type); // 新鲜事的类别,多个类型以逗号分隔,type列表         parameter.put("uid", uid + ""); // 支持传入当前用户的一个好友ID,表示获取此好友的新鲜事,如果不传,默认为获取当前用户的新鲜事         parameter.put("page", page + ""); // 支持分页,指定页号,页号从1开始,默认值为1         parameter.put("count", pageCount + ""); // 支持分页,每一页记录数,默认值为30,最大50         AsyncHttpsPost asyncHttpsPost = new AsyncHttpsPost(Constant.API_SERVER_URL, parameter, new ParseCallback() {            @Override            public LinkedList<FreshNews> parse(String json) throws JSONException {                LogUtil.i(TAG, "getFreshNews() json = " + json);                if ("[]".equals(json)) {                    return null;                }                Gson gson = new Gson();                java.lang.reflect.Type type = new TypeToken<LinkedList<FreshNews>>() {                }.getType();                LinkedList<FreshNews> freshNewsList = gson.fromJson(json, type);                LogUtil.e(TAG, "freshNewsList = " + freshNewsList.size());                return freshNewsList;            }        }, new ResultCallback() {            @Override            public void onSuccess(final Object obj) {                mHandler.post(new Runnable() {                    @Override                    public void run() {                        if (obj != null && obj instanceof LinkedList) {                            @SuppressWarnings("unchecked")                            LinkedList<FreshNews> freshNewsList = (LinkedList<FreshNews>) obj;                            if (freshNewsList.size() > 0) {                                // 下拉刷新的数据去重复处理                                if (page == 1 && mFreshNewsList.size() > 0) {                                    for (FreshNews freshNews : freshNewsList) {                                        boolean flage = false;                                        for (FreshNews fresh : mFreshNewsList) {                                            if (freshNews.getPost_id() == fresh.getPost_id()) {                                                flage = true;                                            }                                        }                                        if (flage == false) {                                            mFreshNewsList.addFirst(freshNews);                                        }                                    }                                } else {                                    mFreshNewsList.addAll(freshNewsList);                                }                                mListView.setPullLoadEnable(true);                                mListView.setPullRefreshEnable(true);                            }                        } else {                            mListView.setPullLoadEnable(false);                        }                        if (page == 1) {                            mFreshNewsAdapter.notifyDataSetInvalidated();                            mListView.stopRefresh();                        } else {                            mFreshNewsAdapter.notifyDataSetChanged();                            mListView.stopLoadMore();                        }                        // 设置刷新时间                        SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");                        String refreshTime = mDateFormat.format(System.currentTimeMillis());                        mListView.setRefreshTime(refreshTime);                    }                });            }            @Override            public void onFail(int errorCode) {                LogUtil.i(TAG, "freshNewsList errorCode = " + errorCode);            }        });        mDefaultThreadPool.execute(asyncHttpsPost);        mAsyncRequests.add(asyncHttpsPost);    }}
好了,这一篇就先聊到这里,后面的待续。谢谢大家的关注与支持。


更多相关文章

  1. Android活跃用户总数达14亿人 平均每4个月增加1亿用户
  2. Android敲诈者病毒“安卓性能激活”分析(2015年9月版)
  3. (转帖)Android开发者应该如何推广营销自己的应用程序
  4. Android靠哪些东西能打败iphone
  5. Android官方建议关于Android(安卓)APP UI界面设计的一些参考原则
  6. android 自带的下拉刷新控件,含Demo(SwipeRefreshLayout控件)
  7. 4.8.4 在Android(安卓)中fragment中获取上下文
  8. android 自带的下拉刷新控件,含Demo(SwipeRefreshLayout控件)
  9. android webview设置自适应任意大小的pc网页

随机推荐

  1. android支付宝客户端html5网页偶尔无法自
  2. scrollTo 以及 scrollBy方法使用说明
  3. Android——XML解析
  4. Android启动模式总结
  5. android 设置静态wifi地址
  6. Android消息机制 Handler
  7. Java如何操作Android的adb shell 之 我自
  8. Android GPS状态改变与监听
  9. Android(安卓)中 Retrofit 结合 RxJava使
  10. Android 软键盘小知识点