新浪微博开发之发表微博功能的实现

来源:互联网 发布:知乎的海贼 王路飞 编辑:程序博客网 时间:2024/06/05 14:40

发表微博的功能其实很简单,我们只需要调用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() {@Overridepublic 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() {@Overridepublic 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);}});}


   

为了获取图片路径,我们需要重写onActivityResult(int requestCode, int resultCode, Intent data)方法:

@Overrideprotected 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);}}}

通过上述步骤,我们就可以发布微博了。

有问题请留言,大家一起学习交流!

说明:转载请注明出处!

原创粉丝点击