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

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

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版