Android实战简易教程-第二十八枪(基于Bmob实现头像图片设置和网络上传功能!)

来源:互联网 发布:httpclient java 编辑:程序博客网 时间:2024/05/17 03:48

上一篇我们介绍了如何由uri转换成String ,本文就用到了上篇文章的方法,下面我们介绍一下如何设置头像后将头像图片上传到云端的方法,本文基于Bmob提供的服务。

看一下代码:(布局文件和前两篇文章依旧一样,不再提供)

[java] view plain copy
  1. package com.example.userphoto;  
  2.   
  3. import java.io.File;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.Intent;  
  7. import android.database.Cursor;  
  8. import android.graphics.Bitmap;  
  9. import android.graphics.drawable.BitmapDrawable;  
  10. import android.graphics.drawable.Drawable;  
  11. import android.net.Uri;  
  12. import android.os.Bundle;  
  13. import android.os.Environment;  
  14. import android.provider.MediaStore;  
  15. import android.view.View;  
  16. import android.view.View.OnClickListener;  
  17. import android.widget.Button;  
  18. import android.widget.ImageView;  
  19. import android.widget.Toast;  
  20. import cn.bmob.v3.Bmob;  
  21. import cn.bmob.v3.datatype.BmobFile;  
  22. import cn.bmob.v3.listener.UploadFileListener;  
  23.   
  24. public class MainActivity extends Activity implements OnClickListener {  
  25.     private static final int IMAGE_REQUEST_CODE = 0;  
  26.     private static final int CAMERA_REQUEST_CODE = 1;  
  27.     private static final int RESIZE_REQUEST_CODE = 2;  
  28.   
  29.     private static final String IMAGE_FILE_NAME = "header.jpg";  
  30.   
  31.     private ImageView mImageHeader;  
  32.   
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.   
  38.         Bmob.initialize(this"8f3ffb2658d8a3366a70a0b0ca0b71b2");//初始化Bmob  
  39.         setupViews();  
  40.     }  
  41.   
  42.     private void setupViews() {  
  43.         mImageHeader = (ImageView) findViewById(R.id.image_header);  
  44.         final Button selectBtn1 = (Button) findViewById(R.id.btn_selectimage);  
  45.         final Button selectBtn2 = (Button) findViewById(R.id.btn_takephoto);  
  46.         selectBtn1.setOnClickListener(this);  
  47.         selectBtn2.setOnClickListener(this);  
  48.     }  
  49.   
  50.     @Override  
  51.     public void onClick(View v) {  
  52.         switch (v.getId()) {  
  53.         case R.id.btn_selectimage:  
  54.             Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);  
  55.             galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);  
  56.             galleryIntent.setType("image/*");//图片  
  57.             startActivityForResult(galleryIntent, IMAGE_REQUEST_CODE);  
  58.             break;  
  59.         case R.id.btn_takephoto:  
  60.             if (isSdcardExisting()) {  
  61.                 Intent cameraIntent = new Intent(  
  62.                         "android.media.action.IMAGE_CAPTURE");//拍照  
  63.                 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, getImageUri());  
  64.                 cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);  
  65.                 startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE);  
  66.             } else {  
  67.                 Toast.makeText(v.getContext(), "请插入sd卡", Toast.LENGTH_LONG)  
  68.                         .show();  
  69.             }  
  70.             break;  
  71.         }  
  72.     }  
  73.   
  74.     @Override  
  75.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  76.         if (resultCode != RESULT_OK) {  
  77.             return;  
  78.         } else {  
  79.             switch (requestCode) {  
  80.             case IMAGE_REQUEST_CODE:  
  81.                 Uri originalUri=data.getData();//获取图片uri  
  82.                 resizeImage(originalUri);  
  83.                 //下面方法将获取的uri转为String类型哦!  
  84.                 String []imgs1={MediaStore.Images.Media.DATA};//将图片URI转换成存储路径    
  85.                 Cursor cursor=this.managedQuery(originalUri, imgs1, nullnullnull);    
  86.                 int index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);    
  87.                 cursor.moveToFirst();    
  88.                 String img_url=cursor.getString(index);   
  89.                 upload(img_url);  
  90.                 //showToast(img_url);  
  91.                 break;  
  92.             case CAMERA_REQUEST_CODE:  
  93.                 if (isSdcardExisting()) {  
  94.                     resizeImage(getImageUri());  
  95.                     String []imgs={MediaStore.Images.Media.DATA};//将图片URI转换成存储路径    
  96.                     Cursor cursor1=this.managedQuery(getImageUri(), imgs, nullnullnull);    
  97.                     int index1=cursor1.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);    
  98.                     cursor1.moveToFirst();    
  99.                     String img_url1=cursor1.getString(index1);  
  100.                     upload(img_url1);  
  101.                     //showToast(img_url1);  
  102.                       
  103.                       
  104.                       
  105.                 } else {  
  106.                     Toast.makeText(MainActivity.this"未找到存储卡,无法存储照片!",  
  107.                             Toast.LENGTH_LONG).show();  
  108.                 }  
  109.                 break;  
  110.   
  111.             case RESIZE_REQUEST_CODE:  
  112.                 if (data != null) {  
  113.                     showResizeImage(data);  
  114.                 }  
  115.                 break;  
  116.             }  
  117.         }  
  118.   
  119.         super.onActivityResult(requestCode, resultCode, data);  
  120.     }  
  121.     private void showToast(String msg){  
  122.         Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();  
  123.     }  
  124.   
  125.     private boolean isSdcardExisting() {//判断SD卡是否存在  
  126.         final String state = Environment.getExternalStorageState();  
  127.         if (state.equals(Environment.MEDIA_MOUNTED)) {  
  128.             return true;  
  129.         } else {  
  130.             return false;  
  131.         }  
  132.     }  
  133.   
  134.     public void resizeImage(Uri uri) {//重塑图片大小  
  135.         Intent intent = new Intent("com.android.camera.action.CROP");  
  136.         intent.setDataAndType(uri, "image/*");  
  137.         intent.putExtra("crop""true");//可以裁剪  
  138.         intent.putExtra("aspectX"1);  
  139.         intent.putExtra("aspectY"1);  
  140.         intent.putExtra("outputX"150);  
  141.         intent.putExtra("outputY"150);  
  142.         intent.putExtra("return-data"true);  
  143.         startActivityForResult(intent, RESIZE_REQUEST_CODE);  
  144.     }  
  145.   
  146.     private void showResizeImage(Intent data) {//显示图片  
  147.         Bundle extras = data.getExtras();  
  148.         if (extras != null) {  
  149.             Bitmap photo = extras.getParcelable("data");  
  150.             Drawable drawable = new BitmapDrawable(photo);  
  151.             mImageHeader.setImageDrawable(drawable);  
  152.         }  
  153.     }  
  154.   
  155.     private Uri getImageUri() {//获取路径  
  156.         return Uri.fromFile(new File(Environment.getExternalStorageDirectory(),  
  157.                 IMAGE_FILE_NAME));  
  158.     }  
  159.       
  160.     /**  
  161.      * 将图片上传  
  162.      * @param imgpath  
  163.      */  
  164.     private void upload(String imgpath){  
  165.         final BmobFile icon = new BmobFile(new File(imgpath));  
  166.         icon.upload(thisnew UploadFileListener() {  
  167.               
  168.             @Override  
  169.             public void onSuccess() {  
  170.                 // TODO Auto-generated method stub  
  171.                 Person person = new Person();  
  172.                 person.setIcon(icon);  
  173.                 person.save(MainActivity.this);  
  174.                 showToast("图片上传成功");  
  175.             }  
  176.               
  177.             @Override  
  178.             public void onProgress(Integer arg0) {  
  179.                 // TODO Auto-generated method stub  
  180.                   
  181.             }  
  182.               
  183.             @Override  
  184.             public void onFailure(int arg0, String arg1) {  
  185.                 // TODO Auto-generated method stub  
  186.                 showToast("图片上传失败:"+arg1);  
  187.             }  
  188.         });  
  189.     }  
  190. }  

javabean类:

[java] view plain copy
  1. package com.example.userphoto;  
  2.   
  3. import cn.bmob.v3.BmobObject;  
  4. import cn.bmob.v3.datatype.BmobFile;  
  5.   
  6. public class Person extends BmobObject {  
  7.     private BmobFile icon;  
  8.   
  9.     public BmobFile getIcon() {  
  10.         return icon;  
  11.     }  
  12.   
  13.     public void setIcon(BmobFile icon) {  
  14.         this.icon = icon;  
  15.     }  
  16.       
  17. }  

运行实例,又再次出现问题:


还是权限问题:


然后再运行:


提示图片上传成功,我们看一下后台:




OK,图片已经上传成功喽!是不是很吊?

本文转载自:http://blog.csdn.net/yayun0516/article/details/47068739?locationNum=1



0 0
原创粉丝点击