新浪微博开发之查看详细微博的实现
来源:互联网 发布:黑米小米抢购软件 编辑:程序博客网 时间:2024/05/21 22:57
实现了获取用户主页微博之后,我们还需要实现查看详细微博的功能。除微博常见的属性外,如果微博中包含图片,还要实现浏览大图的功能。同时我们还需要实现转发,评论等功能!今天我们就来实现上述功能。
详细微博:
用户点击一个微博Item从微博主页跳转到微博详细页,跳转的过程中我们要把微博(Status)数据传递到Activity中,在listview的setOnItemClickListener方法中添加如下代码:
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);跳转到StatusDetail类中,我们可以使用getIntent()来获取微博数据(Status)。代码如下:
Status status = (Status) getIntent().getSerializableExtra("status");
获取到微博数据之后就简单了。
接下来我们要实现,转发的功能,只需要为转发按钮设置一个监听器然后调用weibo.retweetStatus(status.getId())方法即可,需要设置参数status_id:要转发的微博Id。
发表评论与发表微博功能基本类似,这里不再详细介绍了,如有疑问可参考我的博文:新浪微博开发之发表微博功能的实现。
下面介绍实现浏览大图的功能:
有了微博数据,我们就可以获取大图的地址status.getOriginal_pic();即原图片地址。这里我使用了对话框的形式,新建一个Dialog将试图view设置为图片就可以了。代码如下:
String imageUrl = status.getOriginal_pic();if(!"".equals(imageUrl)){ //如果微博中包含图片this.findViewById(R.id.scale_layout).setVisibility(View.VISIBLE);scaleImage = (ImageButton) findViewById(R.id.scale_btn);scaleImage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showOriginalImage(imageUrl); //放大图片}});setImage(imageUrl, picture); picture.setVisibility(View.VISIBLE);}
需要注意的是一定要先检查微博中是否包含图片,否则会报异常!
showOriginalImage(imageUrl)方法代码:
/** * 显示大图 * @param imageUrl * 图片地址 */private void showOriginalImage(String imageUrl) {View view = View.inflate(StatusDetail.this, R.layout.show_original_image, null);final AlertDialog dialog = new AlertDialog.Builder(StatusDetail.this).setView(view).create();dialog.show();ImageButton close = (ImageButton) view.findViewById(R.id.close_btn); //关闭查看大图窗口close.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss(); }});ImageView image = (ImageView) view.findViewById(R.id.originalImage);setImage(imageUrl, image); //设置大图}
整体的过程大致就是这样,效果图如下:
详细代码如下:
package com.cloay.weibo.ui;import weibo4android.Comment;import weibo4android.Status;import weibo4android.Weibo;import weibo4android.WeiboException;import android.app.AlertDialog;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.EditText;import android.widget.ImageButton;import android.widget.ImageView;import android.widget.TextView;import com.cloay.weibo.R;import com.cloay.weibo.WeiBoActivity;import com.cloay.weibo.constants.OAuthConstant;import com.cloay.weibo.service.MainService;import com.cloay.weibo.utils.AsyncBitMapLoader;import com.cloay.weibo.utils.AsyncBitMapLoader.ImageCallback;import com.cloay.weibo.utils.AlertDlgUtil;import com.cloay.weibo.utils.CheckNetUtil;import com.cloay.weibo.utils.TextHightUtil;import com.cloay.weibo.utils.TimeUtil;import com.cloay.weibo.utils.ToastUtil;/** * 微博详细信息 * 可以进行转发,评论查看大图等 * @author Cloay * 2012-2-30 * 下午03:31:18 */public class StatusDetail extends WeiBoActivity{private Weibo weibo = OAuthConstant.getInstance().getWeibo(); private ImageButton redirect; //右侧转发按钮private ImageView user_icon; //用户头像private TextView user_name; //用户昵称private TextView time; //微博发表时间private TextView status_text; //微博内容private ImageView picture; //微博图片private EditText comment_text; //评论内容private Button commentBtn; //评论按钮private ImageButton scaleImage; //查看大图按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉系统标题栏MainService.allActivity.add(this);setContentView(R.layout.detail_status);//不让输入法自动弹出getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);final Status status = (Status) getIntent().getSerializableExtra("status");redirect = (ImageButton) findViewById(R.id.title_bt_right);redirect.setOnClickListener(new OnClickListener() { //转发微博@Overridepublic void onClick(View v) {try {Status reStatus = weibo.retweetStatus(status.getId());if(!"".equals(reStatus.getText())){ToastUtil.showToast(StatusDetail.this, "转发成功!");}} catch (WeiboException e) {ToastUtil.showToast(StatusDetail.this, "转发失败!");}}});initStatus(status); //初始化微博内容initComment(status); //评论}/** * 初始化微博内容 * @param status */private void initStatus(final Status status) {user_icon = (ImageView) findViewById(R.id.user_logo);setImage(status.getUser().getProfileImageUrl(), user_icon); //设置用户头像user_name = (TextView) findViewById(R.id.user_name);user_name.setText(TextHightUtil.setTextHight(status.getUser().getName())); //设置用户昵称并高亮显示time = (TextView) findViewById(R.id.time);time.setText(TimeUtil.getCreateAt(status.getCreatedAt())); //设置微博发表时间status_text = (TextView) findViewById(R.id.status_content); //微博内容String statusStr = status.getText();if(null != status.getRetweeted_status()){ //如果包含转发的内容statusStr += status.getRetweeted_status().getText();}TextHightUtil.textHighlight(statusStr, status_text); //设置微博内容picture = (ImageView) findViewById(R.id.picture);final String imageUrl = status.getOriginal_pic();if(!"".equals(imageUrl)){ //如果微博中包含图片this.findViewById(R.id.scale_layout).setVisibility(View.VISIBLE);scaleImage = (ImageButton) findViewById(R.id.scale_btn);scaleImage.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {showOriginalImage(imageUrl); //放大图片}});setImage(imageUrl, picture); picture.setVisibility(View.VISIBLE);}}/** * 显示大图 * @param imageUrl * 图片地址 */private void showOriginalImage(String imageUrl) {View view = View.inflate(StatusDetail.this, R.layout.show_original_image, null);final AlertDialog dialog = new AlertDialog.Builder(StatusDetail.this).setView(view).create();dialog.show();ImageButton close = (ImageButton) view.findViewById(R.id.close_btn); //关闭查看大图窗口close.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {dialog.dismiss(); }});ImageView image = (ImageView) view.findViewById(R.id.originalImage);setImage(imageUrl, image); //设置大图}/** * 发表评论 * @param status */private void initComment(final Status status) {comment_text = (EditText) findViewById(R.id.comment_edit_text);commentBtn = (Button) findViewById(R.id.comment_status_btn);commentBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {updateComment(status);}});}/** * 发布微博 * 微博内容不能为空且字数小于140 */private void updateComment(Status status) {String commentText = comment_text.getText().toString();if("".equals(commentText)){ //微博内容不能为空且字数小于140.ToastUtil.showToast(StatusDetail.this, "评论内容不能为空!");// 为空时提示}else{if(commentText.length() > 140){ToastUtil.showToast(this, "字数不能多于140!"); //大于140个字符时}if(CheckNetUtil.checkNet(StatusDetail.this)){ //检查网络是否可用try {Comment comment = weibo.updateComment(commentText, ""+status.getId(), "");if(!"".equals(comment.getText())){ToastUtil.showToast(StatusDetail.this, "评论成功!");}} catch (WeiboException e) {ToastUtil.showToast(StatusDetail.this, "评论失败!");}}else{AlertDlgUtil.alertDialogNetErr(StatusDetail.this);}}}/** * 异步获取图片并设置 * @param imageUrl * @param image */private void setImage(String imageUrl, final ImageView image) {AsyncBitMapLoader asyncBitMapLoader = new AsyncBitMapLoader();asyncBitMapLoader.loadBitMap(imageUrl, new ImageCallback() {@Overridepublic void imageLoaded(Bitmap bitmap, String imageUrl) {image.setImageBitmap(bitmap);}});}}
该注释的地方都注释了,不再多说了!有问题请留言,大家一起学习交流!
说明:转载请注明出处!
- 新浪微博开发之查看详细微博的实现
- 新浪微博开发之微博主页的实现
- 新浪微博开发之授权的实现(一)
- 新浪微博开发之授权的实现(二)
- 新浪微博开发之主程序界面的实现
- 新浪微博开发之授权用户登录的实现
- (droid分享)新浪微博开发系列【六】之查看@我的微博和评论
- (droid分享)新浪微博开发系列【七】之查看我的好友和粉丝
- 超详细的Python实现新浪微博模拟登陆
- 新浪微博开发之php开发
- (droid分享)新浪微博开发系列【十一】之查看微博正文
- 新浪微博开发之发表微博功能的实现
- 新浪微博开发之发表微博功能的实现
- iOS开发-新浪微博自定义tabbar的实现
- 新浪微博开发一(引导页面的实现)
- 新浪微博开发二(底部菜单栏的实现)
- 新浪微博开发七(下拉菜单的实现)
- 用redis实现仿新浪微博“查看会话”功能
- linux目录作用详解(超详细,树状排版)
- Servlet概述
- 在 VS2008 / VS2010 下编译和使用 sqlite3
- Servlet能够做什么?
- 工程师追查线上问题(或运维)常用的shell命令(http://www.cnblogs.com/clam/archive/2012/03/29/2423084.html)
- 新浪微博开发之查看详细微博的实现
- C++中的XML配置文件编程经验
- s3c2410_gpio_cfgpin函数解析
- 命令(Command)模式
- 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
- erlang 开发建议
- http://www.cnblogs.com/nova_zhang/archive/2010/05/13/1734344.html
- 实现机制:利用FlexEvent.IDLE空闲事件,然后用mx_internal::idleCounter来获取空闲时间。
- Servlet如何工作?