新浪微博开发之微博主页的实现

2023-11-20 15:48

本文主要是介绍新浪微博开发之微博主页的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户使用已授权用户登录成功之后,我们就可以获取微博了。微博主页既是用户登录新浪微博时看到的内容,即自己关注用户的微博内容。我们可使用SDK中Weibo的getHomeTimeline()方法,该方法通过对API接口的访问获取微博Json数据。使用该方法前我们一定要为Weibo设置accessToken值

布局中放置一个ListView,我们要做的主要是为listview设置微博数据,布局代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent" android:background="@color/white"><include android:id="@+id/content_progress" layout="@layout/progress_bar" /><RelativeLayout android:gravity="right" android:paddingRight="30dip"android:layout_width="wrap_content" android:layout_height="wrap_content"><ImageView android:layout_width="80dip" android:id="@+id/try_again"android:layout_height="80dip" android:layout_marginTop="10dip" android:background="@drawable/try_again"android:visibility="gone"android:layout_alignParentRight="true"></ImageView></RelativeLayout><ImageView android:id="@+id/empty" android:layout_width="wrap_content"android:layout_height="wrap_content" android:background="@drawable/empty"android:layout_gravity="center"/><ListView android:id="@+id/contentList" android:layout_width="fill_parent"android:layout_height="fill_parent" android:visibility="gone"android:divider="@drawable/divider_horizontal_timeline" android:listSelector="#00000000"android:cacheColorHint="#00000000"></ListView></LinearLayout>

在获取数据时我们要显示一个进度条,当获取到数据后关闭进度条!为了避免ANR我们同样采用启动新线程来获取数据,使用Handler来更新UI。具体代码:

package com.cloay.weibo.ui;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import weibo4android.Status;
import weibo4android.Weibo;import com.cloay.weibo.R;
import com.cloay.weibo.constants.Constant;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.service.MainService;
import com.cloay.weibo.service.Task;
import com.cloay.weibo.utils.AlertDlgUtil;
import com.cloay.weibo.utils.CheckNetUtil;
import com.cloay.weibo.utils.ToastUtil;
import com.cloay.weibo.adapter.HomeListAdapter;import android.app.Activity;
import android.app.Service;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
/*** 微博主页* @author Cloay* 2012-2-24* 下午05:18:13*/
public class HomeActivity extends Activity implements SensorEventListener{private LinearLayout progress;  //进度条private ImageView empty;   //数据为获取时private ImageView tryAgain;   //刷新重试private ListView listView;  //存储微博数据private List<Status> listStatus = new ArrayList<Status>();   //存放微博数据的listprivate HomeListAdapter adapter;private Weibo mWeibo = OAuthConstant.getInstance().getWeibo();//用于摇一摇刷新微博SensorManager sensorManager = null;  Vibrator vibrator = null; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);MainService.allActivity.add(this);setContentView(R.layout.home);//初识化init();//加载微博数据getStatus();}/*** 后台加载微博数据*/private void getStatus() {if(CheckNetUtil.checkNet(HomeActivity.this)){ //先检查网络是否可用HashMap<String, Weibo> parms = new HashMap<String, Weibo>();parms.put("weibo", mWeibo);Task task = new Task(Task.GET_STATUS, parms);MainService.allTask.add(task);}else{progress.setVisibility(View.GONE);tryAgain.setVisibility(View.VISIBLE);AlertDlgUtil.alertDialogNetErr(HomeActivity.this);}}private void init() {mWeibo.setOAuthAccessToken(OAuthConstant.getInstance().getAccessToken());  //一定要设置sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);progress = (LinearLayout) findViewById(R.id.content_progress);  empty = (ImageView) findViewById(R.id.empty);tryAgain = (ImageView) findViewById(R.id.try_again);listView = (ListView) findViewById(R.id.contentList);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {if(adapter.listSize == position + 1 && position < 65){      //动态加载跟多微博数据adapter.listSize += 15;adapter.notifyDataSetChanged();}else{Bundle bundle = new Bundle();Status status = listStatus.get(position);bundle.putSerializable("status", status);Intent intent = new Intent(HomeActivity.this, StatusDetail.class);  //查看详细微博intent.putExtras(bundle);startActivity(intent);}}});}private Handler handler = new Handler(){@SuppressWarnings("unchecked")@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if(msg.what == Constant.GET_DATA_NORMAL){         //if获取数据正常listStatus = (List<Status>) msg.obj;  adapter = new HomeListAdapter(HomeActivity.this, listStatus);listView.setAdapter(adapter);progress.setVisibility(View.GONE);     //关闭进度条empty.setVisibility(View.GONE);       //获取数据后隐藏if(tryAgain.isShown()){tryAgain.setVisibility(View.GONE);}listView.setVisibility(View.VISIBLE);}else if(msg.what == Constant.GET_DATA_ERROR){   //获取数据异常progress.setVisibility(View.GONE);tryAgain.setVisibility(View.VISIBLE);empty.setVisibility(View.VISIBLE);ToastUtil.showToast(HomeActivity.this, "加载数据异常,请重试!");}}};public void refresh(Message msg){handler.sendMessage(msg);System.out.println("refresh ------------->!!!");}/*** 刷新方法重新加载微博数据*/public void refresh(){if(progress.isShown()){ToastUtil.showToast(this, "正在加载数据,请稍后...");}else{getStatus();progress.setVisibility(View.VISIBLE);}}@Overrideprotected void onResume() { //注册sensorManagersuper.onResume();sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {super.onPause();sensorManager.unregisterListener(this); //程序结束注销}@Overridepublic void onSensorChanged(SensorEvent event) {int sensorType = event.sensor.getType();  //values[0]:X轴,values[1]:Y轴,values[2]:Z轴  float[] values = event.values;  if(sensorType == Sensor.TYPE_ACCELEROMETER){              if((Math.abs(values[0]) > 18 || Math.abs(values[1]) > 18 || Math.abs(values[2]) > 18)){  if(progress.isShown()){ToastUtil.showToast(this, "正在刷新,请稍后...");}else{refresh(); //重新开启任务//摇动手机后,再伴随震动提示~~  vibrator.vibrate(300);progress.setVisibility(View.VISIBLE);}}  }}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
}
getHomeTimeline()返回的是一个List<Satus>类型的数据,我们要自定义一个Adapter为listView设置微博数据!请参考下一篇: 新浪微博开发之为listView设置微博数据。

运行效果如下:

                   

就写那么多,有问题请留言大家一起交流学习!

说明:转载请注明出处!



这篇关于新浪微博开发之微博主页的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/395711

相关文章

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot+EasyPOI轻松实现Excel和Word导出PDF

《SpringBoot+EasyPOI轻松实现Excel和Word导出PDF》在企业级开发中,将Excel和Word文档导出为PDF是常见需求,本文将结合​​EasyPOI和​​Aspose系列工具实... 目录一、环境准备与依赖配置1.1 方案选型1.2 依赖配置(商业库方案)二、Excel 导出 PDF

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录