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

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深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加