新浪微博开发之发表微博功能的实现
来源:互联网 发布:windows阻止软件安装 编辑:程序博客网 时间:2024/06/05 10:04
转自:http://blog.csdn.net/shang_515/article/details/7420049
发表微博的功能其实很简单,我们只需要调用SDK中的方法即可。稍微麻烦一点的是发表包含图片的微博,今天主要介绍如何获取图片路径,并实现发表带图片的微博。
先说一下我的思路:当用户点击添加图片按钮时,我实现了两种方法一是调用摄像头,另一种方法是使用系统图库打开图片。两种方法都是返回图片路径,通过图片路径我们可以读取图片,然后上传到服务器上即可实现发布带图片的微博。
发表微博界面:
用户点击插入图片按钮后调用showMenuDialog()方法:
- private void showMenuDialog() { //获取图片路径
- View menuView = View.inflate(UpdateStatus.this, R.layout.upload_dialog_menu, null);
- final AlertDialog menuDialog = new AlertDialog.Builder(UpdateStatus.this)
- .setView(menuView)
- .setTitle("插入图片")
- .setIcon(R.drawable.ic_upload_photo)
- .create();
- menuDialog.show();
- menuView.findViewById(R.id.camera).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- menuDialog.dismiss();
- Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");//使用照相机
- startActivityForResult(intentCamera, Activity.DEFAULT_KEYS_DIALER);
- }
- });
- menuView.findViewById(R.id.picture).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- menuDialog.dismiss();
- Intent intent = new Intent();
- /* 开启Pictures画面Type设定为image */
- intent.setType("image/*");
- /* 使用Intent.ACTION_GET_CONTENT这个Action */
- intent.setAction(Intent.ACTION_GET_CONTENT);
- /* 取得相片后返回本画面 */
- startActivityForResult(intent, 2);
- }
- });
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode == RESULT_OK) {
- if(null == data){
- ToastUtil.showToast(this, "添加图片失败!");
- return;
- }
- Uri thisUri = data.getData();
- fileName = getRealPathFromURI(thisUri); //通过uri获取图片路径
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
getRealPathFromURI( )方法如下:
- /**
- * 通过Uri获取文件在本地存储的真实路径
- * @param act
- * @param contentUri
- * @return
- */
- private String getRealPathFromURI(Uri uri) {
- // can post image
- //指定获取的列
- String columns[] = new String[]{ Media.DATA, Media._ID, Media.TITLE, Media.DISPLAY_NAME };
- Cursor cursor = this.managedQuery(uri, columns, // Which columns to return
- null, // WHERE clause; which rows to return (all rows)
- null, // WHERE clause selection arguments (none)
- null); // Order-by clause (ascending by name)
- int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
- cursor.moveToFirst();
- return cursor.getString(column_index);
- }
获取到了图片路径,我们就可以读取图片了。之后我们就可以发表微博了。发表微博的方法:
- /**
- * 发布微博
- * 微博内容不能为空且字数小于140
- */
- private void updateStatus() {
- String statusText = statusEditText.getText().toString();
- if("".equals(statusText) && statusText.length() > 140){ //微博内容不能为空且字数小于140.
- AlertDlgUtil.alertDialog(UpdateStatus.this);// 为空时提示
- }else{
- if(statusText.length() > 140){
- ToastUtil.showToast(this, "字数不能多于140!"); //大于140个字符时
- }
- if(CheckNetUtil.checkNet(UpdateStatus.this)){ //检查网络是否可用
- if("".equals(fileName)){ //不包含图片时
- thread = new ServerThread(weibo, statusText, false, handler);
- thread.start();
- }else{
- // System.out.println("fileName------->: " + fileName);
- byte[] content = ImageReaderUtil.readFileImage(fileName);//包含图片时
- // System.out.println("content length:" + content.length);
- ImageItem pic = new ImageItem("pic",content);
- String s = java.net.URLEncoder.encode(statusText, "utf-8");
- thread = new ServerThread(weibo, s, pic, true, handler);
- thread.start();
- }
- }else{
- AlertDlgUtil.alertDialogNetErr(UpdateStatus.this);
- }
- }
- }
发表微博的功能其实很简单,我们只需要调用SDK中的方法即可。稍微麻烦一点的是发表包含图片的微博,今天主要介绍如何获取图片路径,并实现发表带图片的微博。
先说一下我的思路:当用户点击添加图片按钮时,我实现了两种方法一是调用摄像头,另一种方法是使用系统图库打开图片。两种方法都是返回图片路径,通过图片路径我们可以读取图片,然后上传到服务器上即可实现发布带图片的微博。
发表微博界面:
用户点击插入图片按钮后调用showMenuDialog()方法:
- private void showMenuDialog() { //获取图片路径
- View menuView = View.inflate(UpdateStatus.this, R.layout.upload_dialog_menu, null);
- final AlertDialog menuDialog = new AlertDialog.Builder(UpdateStatus.this)
- .setView(menuView)
- .setTitle("插入图片")
- .setIcon(R.drawable.ic_upload_photo)
- .create();
- menuDialog.show();
- menuView.findViewById(R.id.camera).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- menuDialog.dismiss();
- Intent intentCamera = new Intent("android.media.action.IMAGE_CAPTURE");//使用照相机
- startActivityForResult(intentCamera, Activity.DEFAULT_KEYS_DIALER);
- }
- });
- menuView.findViewById(R.id.picture).setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- menuDialog.dismiss();
- Intent intent = new Intent();
- /* 开启Pictures画面Type设定为image */
- intent.setType("image/*");
- /* 使用Intent.ACTION_GET_CONTENT这个Action */
- intent.setAction(Intent.ACTION_GET_CONTENT);
- /* 取得相片后返回本画面 */
- startActivityForResult(intent, 2);
- }
- });
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode == RESULT_OK) {
- if(null == data){
- ToastUtil.showToast(this, "添加图片失败!");
- return;
- }
- Uri thisUri = data.getData();
- fileName = getRealPathFromURI(thisUri); //通过uri获取图片路径
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
getRealPathFromURI( )方法如下:
- /**
- * 通过Uri获取文件在本地存储的真实路径
- * @param act
- * @param contentUri
- * @return
- */
- private String getRealPathFromURI(Uri uri) {
- // can post image
- //指定获取的列
- String columns[] = new String[]{ Media.DATA, Media._ID, Media.TITLE, Media.DISPLAY_NAME };
- Cursor cursor = this.managedQuery(uri, columns, // Which columns to return
- null, // WHERE clause; which rows to return (all rows)
- null, // WHERE clause selection arguments (none)
- null); // Order-by clause (ascending by name)
- int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
- cursor.moveToFirst();
- return cursor.getString(column_index);
- }
获取到了图片路径,我们就可以读取图片了。之后我们就可以发表微博了。发表微博的方法:
- /**
- * 发布微博
- * 微博内容不能为空且字数小于140
- */
- private void updateStatus() {
- String statusText = statusEditText.getText().toString();
- if("".equals(statusText) && statusText.length() > 140){ //微博内容不能为空且字数小于140.
- AlertDlgUtil.alertDialog(UpdateStatus.this);// 为空时提示
- }else{
- if(statusText.length() > 140){
- ToastUtil.showToast(this, "字数不能多于140!"); //大于140个字符时
- }
- if(CheckNetUtil.checkNet(UpdateStatus.this)){ //检查网络是否可用
- if("".equals(fileName)){ //不包含图片时
- thread = new ServerThread(weibo, statusText, false, handler);
- thread.start();
- }else{
- // System.out.println("fileName------->: " + fileName);
- byte[] content = ImageReaderUtil.readFileImage(fileName);//包含图片时
- // System.out.println("content length:" + content.length);
- ImageItem pic = new ImageItem("pic",content);
- String s = java.net.URLEncoder.encode(statusText, "utf-8");
- thread = new ServerThread(weibo, s, pic, true, handler);
- thread.start();
- }
- }else{
- AlertDlgUtil.alertDialogNetErr(UpdateStatus.this);
- }
- }
- }
- 新浪微博开发之发表微博功能的实现
- 新浪微博开发之发表微博功能的实现
- 开发第二步之启动动画,登入新浪微博,发表微博等
- 实现类似于新浪微博@的功能
- 实现类似于新浪微博的@功能
- 新浪微博 分享 功能的实现
- 新浪微博开发之微博主页的实现
- 新浪微博发表内容ajax拼接
- 新浪微博开发之授权的实现(一)
- 新浪微博开发之授权的实现(二)
- 新浪微博开发之主程序界面的实现
- 新浪微博开发之授权用户登录的实现
- 新浪博客发表博文不同步到新浪微博
- 新浪微博开发五(导航栏功能的实现)
- android 新浪微博分享功能实现
- android 新浪微博实现分享功能
- 实现类似新浪微博@人功能
- 新浪微博下拉刷新功能的实现
- 代理模式
- cocoa绘制图片
- 毛概多项选择题答案统计程序
- 俞敏洪老师的这段话...... (记住每天早晚看一次)
- 数独求解程序
- 新浪微博开发之发表微博功能的实现
- Graph Algorithms: Implementation& DFS& Strong Component& BFS & Dijkstra & Bellman Ford
- 程序模块时间运行计算 linux内核代码
- Qt画线条
- 6个有用的MySQL语句
- NET下基于OO4O,FME,ODP.NET的Oracle Spatial空间数据读取操作
- 基于蚁群的无线传感器网络路由协议研究
- 简单工厂模式vs工厂方法模式
- 流量统计系统架构设计