android 用户头像,图片裁剪,上传并附带用户数据base64code 方

图片上传的文件流我上一篇博客写了,这一篇我们说一下base64,base64上传方式就是将图片转换成base64码,然后把base64码以字符串的方式上传,然后服务器接收到以后再解码就可以了,相对于文件流来说比较简单;

用户头像上传我们首先要获得图片的url然后再裁剪图片,然后把裁剪后的图片转换成base64然后在上传;

下边是安卓端代码:

首先我们要获得裁剪后的图片;一,选择图片;

代码如下,通过对话框选择获得图片的方式;

activity:

/** 提示对话框*/private void ShowPickDialog() {new AlertDialog.Builder(this).setTitle("设置头像").setNegativeButton("相册", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {dialog.dismiss();// 获取图片Intent intent = new Intent(Intent.ACTION_PICK, null);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");startActivityForResult(intent, 1);}}).setPositiveButton("拍照", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {dialog.dismiss();// 调用拍照Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 下面这句指定调用相机拍照后的照片存储的路径文件名用电话代替intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),userphone + ".jpg")));startActivityForResult(intent, 2);}}).show();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {// 如果是直接从相册获取case 1:startPhotoZoom(data.getData());break;// 如果是调用相机拍照时case 2:File temp = new File(Environment.getExternalStorageDirectory()+ "/" + userphone + ".jpg");startPhotoZoom(Uri.fromFile(temp));break;// 取得裁剪后的图片case 3:/** 非空判断大家一定要验证,如果不验证的话,

*在剪裁之后如果发现不满意,要重新裁剪,丢弃 当前功能时,,会报NullException,*/if (data != null) {setPicToView(data);}break;default:break;}super.onActivityResult(requestCode, resultCode, data);}// 裁剪图片方法实现public void startPhotoZoom(Uri uri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪intent.putExtra("crop", "true");// aspectX aspectY 是宽高的比例intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);// outputX outputY 是裁剪图片宽高intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", true);startActivityForResult(intent, 3);}/** 保存裁剪之后的图片数据*/private void setPicToView(Intent picdata) {Bundle extras = picdata.getExtras();if (extras != null) {Bitmap photo = extras.getParcelable("data");Drawable drawable = new BitmapDrawable(photo);// draw转换为StringByteArrayOutputStream stream = new ByteArrayOutputStream();photo.compress(Bitmap.CompressFormat.JPEG, 60, stream);byte[] b = stream.toByteArray();

// 将图片流以字符串形式存储下来userimg = new String(Base64Coder.encodeLines(b));//在这里我们把图片转换成base64并存进userimg里面

zhuceimg.setImageDrawable(drawable);//图片显示在界面上zhuceimg为imageview控件}}

final Handler handlerzhuce = new Handler() {public void handleMessage(Message msg) {String str = (String) msg.obj;if (str != null) {Toast.makeText(Userzhuce.this, "完善信息成功!", Toast.LENGTH_SHORT).show();} else {Toast.makeText(Userzhuce.this, "信息完善失败!!", Toast.LENGTH_SHORT).show();}}};

//接下来是是数据的发送

public class OnClickListenerzhuce implements OnClickListener {// 提交@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (zhucenc.getText().toString().equals("")) {Toast.makeText(Userzhuce.this, "昵称不能为空!!!", Toast.LENGTH_SHORT).show();} else {new Thread(new Runnable() {@Overridepublic void run() {//封装数据

List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("userphone",userphone));params.add(new BasicNameValuePair("username", zhucenc.getText().toString()));params.add(new BasicNameValuePair("address",zhuceaddress.getText().toString()));params.add(new BasicNameValuePair("photo",userimg));FabuhttpClient zhuce = new FabuhttpClient();try {String str = zhuce.faburubbishifo(params,HttpPath.USERUPDATE_PATH);Message ms = handlerzhuce.obtainMessage();ms.obj = str;handlerzhuce.sendMessage(ms);} catch (ClientProtocolException e) {// TODO Auto-generated catch blockToast.makeText(Userzhuce.this, "信息完善失败",Toast.LENGTH_SHORT).show();e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blockToast.makeText(Userzhuce.this, "完善信息失败!!",Toast.LENGTH_SHORT).show();e.printStackTrace();}}}).start();}}}

下面是用到的两个类,一个是Base64Coder一个是FabuhttpClient;

FabuhttpClient代码如下:

因为冲动会做下让自己无法挽回的事情。

android 用户头像,图片裁剪,上传并附带用户数据base64code 方

相关文章:

你感兴趣的文章:

标签云: