本文主要是介绍新浪微博开发之微博主页的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用户使用已授权用户登录成功之后,我们就可以获取微博了。微博主页既是用户登录新浪微博时看到的内容,即自己关注用户的微博内容。我们可使用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设置微博数据。
运行效果如下:
就写那么多,有问题请留言大家一起交流学习!
说明:转载请注明出处!
这篇关于新浪微博开发之微博主页的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!