个人信息页面的修改及头像的裁剪上传
2018-03-22 00:25
260 查看
1.IM通讯云提供了用户资料的托管,只需要调用简单的接口就可以实现用户资料的获取和更改, 2.当然也可以进行用户的自定义字段
3.我们一般是按照用户进行资料进行获取字段,TIMManager 的initFriendShipSettings方法获取的资料字段,方便灵活的进行资料的获取,
[html] view plain copypublic void initFriendshipSettings(long flags,@Nullable List<String> customFields)
flags:系统默认的字段 比如:昵称,头像url customFields:自定义的字段,可以为null
[html] view plain copyList<String> customInfos = new ArrayList<String>();
customInfos.add(CustomProfile.CUSTOM_GET);
customInfos.add(CustomProfile.CUSTOM_SEND);
customInfos.add(CustomProfile.CUSTOM_LEVEL);
customInfos.add(CustomProfile.CUSTOM_RENZHENG);
TIMManager.getInstance().initFriendshipSettings(CustomProfile.allBaseInfo, customInfos);
当然这都是在我们的applocation中获取的,当我们登录成功的时候就需要获取我们用户的资料,
[html] view plain copypublic void getSelfProfile(TIMValueCallBack<TIMUserProfile> cb)
[html] view plain copyTIMFriendshipManager.getInstance().getSelfProfile(new TIMValueCallBack<TIMUserProfile>() {
@Override
public void onError(int i, String s) {
Toast.makeText(LoginActivity.this, "获取信息失败:" + s, Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(TIMUserProfile timUserProfile) {
//获取自己信息成功
BearApplication.getApplication().setSelfProfile(timUserProfile);
}
});
这就是获取自己的信息 , 一下是对TIMUserprofile的一些成员方法介绍 TIMUserProfile 成员方法:
[html] view plain copy/**
* 获取用户的identifier
* @return 用户的identifier
*/
public String getIdentifier()
/**
* 获取用户的昵称
* @return 用户的昵称
*/
public String getNickName()
/**
* 获取用户头像URL
* @return 用户头像URL
*/
public String getFaceUrl()
/**
* 获取用户个人签名
* @return 用户个人签名
*/
public String getSelfSignature()
/**
* 获取用户加好友的选项
* @return 用户好友选项
*/
public TIMFriendAllowType getAllowType()
/**
* 获取用户备注
* @return 用户备注
*/
public String getRemark()
/**
* 获取被加入的好友分组列表
* @return 分组列表
*/
public List<String> getFriendGroups()
/**
* 获取用户自定义信息
* @return 自定义信息Map
*/
public Map<String, byte[]> getCustomInfo()
/**
* 获取用户性别类型
* @return 用户性别类型
*/
public TIMFriendGenderType getGender()
/**
* 获取用户生日信息
* @return 生日信息
*/
public long getBirthday()
/**
* 获取语言
* @return 语言
*/
public long getLanguage()
/**
* 获取位置信息
* @return 位置信息
*/
public String getLocation()
现在我们拿到了自己的信息,然后我们进行自己信息的修改, 这个方法是设置我们的昵称[html] view plain copypublic void setNickName(@NonNull String var1, TIMCallBack var2)
包括系统的字段我们都可以进行set方法进行设置 但是我们的自定义字段怎么设置呢? 请看下面
key:我们自定义字段的key vakue: 我们自定义字段的value cb: 检测是否成功修改的监听 二。头像的选择 1.还是先上图
[html] view plain copyIntent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempUri = Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "image.jpg"));
// 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
startActivityForResult(openCameraIntent, TAKE_PICTURE);
这是我的拍照功能的代码,通过这几行就可以调用相机进行拍照返回的结果在onactivityforresult里面进行处理 [html] view plain copyIntent openAlbumIntent = new Intent(
Intent.ACTION_GET_CONTENT);
openAlbumIntent.setType("image/*");
startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
这个是我们的相册,进行调用的代码, 下面是我们的返回的统一处理 [html] view plain copy@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { // 如果返回码是可以用的
switch (requestCode) {
case 相机的:
startPhotoZoom(tempUri); // 开始对图片进行裁剪处理
break;
case 相册的:
startPhotoZoom(data.getData()); // 开始对图片进行裁剪处理
break;
case 统一裁剪完的图片:
if (data != null) {
setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上
}
break;
}
}
}
startPhotoZoom的处理 [html] view plain copyprotected void startPhotoZoom(Uri uri) {
if (uri == null) {
Log.i("tag", "The uri is not exist.");
}
tempUri = uri;
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_SMALL_PICTURE);
}
[html] view plain copysetImageToView的处理就是进行图片的保存并上传到服务器
上传我们首先了解一下token是什么 首先Token是一个怎么样的东西,Token存在的意义又在哪里?学过php或是其他web开发的人都知道一个东西叫session和cookie,这些东西可以在服务器或是本地保存一些东西,比如说登录状态,当用户登录后可以通过session或是cookie在本地保存一段时间的登录状态,在这段时间内,用户再度登录的时候就不用再输入用户名和密码了,但是过了一段时间后,用户需要再次进行身份认证,这样一来的话,一方面节省了很多操作的步骤提升了操作体验,同时也节省了很多服务器请求,提高了服务器性能,同时也保证了一定的安全性。那么这个功能如何在android中实现呢?很可惜的是在android中并没有直接提供类似session或cookie的东西,这个时候就是通过Token来完成。Token的存在更像是一个令牌,比如说当我们需要实现具有用户权限的操作时,每一次操作都需要向服务器发送请求,让服务器完成在数据库中进行用户名和密码,这些显然对于服务器的性能是很不利的。当然有人也会说我们可以在一次请求成功后将类似于user_id的东西保存在本地,以后每次请求的时候用user_id进行操作,这样不是就降低了服务器的负担,但是这样的话存在一个问题,就是user_id一旦存储在本地的时候,不是太有可能会自动回收掉,这样一来的话就会导致一个问题,就是app无论何时打开都是验证通过的状态,这样一来安全性降低。而Token就是解决这样一个问题的东西:以上这些话总结一下就是token的定义: Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。 我是用的七牛云进行的头像的上传,我们从服务器上获取我们的token,然后进行头像的上传即可,当然上传这个我放到网路请求的框架这一节来进行详细的讲解
3.我们一般是按照用户进行资料进行获取字段,TIMManager 的initFriendShipSettings方法获取的资料字段,方便灵活的进行资料的获取,
[html] view plain copypublic void initFriendshipSettings(long flags,@Nullable List<String> customFields)
flags:系统默认的字段 比如:昵称,头像url customFields:自定义的字段,可以为null
[html] view plain copyList<String> customInfos = new ArrayList<String>();
customInfos.add(CustomProfile.CUSTOM_GET);
customInfos.add(CustomProfile.CUSTOM_SEND);
customInfos.add(CustomProfile.CUSTOM_LEVEL);
customInfos.add(CustomProfile.CUSTOM_RENZHENG);
TIMManager.getInstance().initFriendshipSettings(CustomProfile.allBaseInfo, customInfos);
当然这都是在我们的applocation中获取的,当我们登录成功的时候就需要获取我们用户的资料,
4.获取用户的资料
TIMFriendshipmanager 的 getSelfProfile方法获去自己的资料,默认只拉取基本资料,如果只需要获取个别字段或者自定义字段 可以使用按照字段获取用户资料 ,此方法全局有效[html] view plain copypublic void getSelfProfile(TIMValueCallBack<TIMUserProfile> cb)
[html] view plain copyTIMFriendshipManager.getInstance().getSelfProfile(new TIMValueCallBack<TIMUserProfile>() {
@Override
public void onError(int i, String s) {
Toast.makeText(LoginActivity.this, "获取信息失败:" + s, Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(TIMUserProfile timUserProfile) {
//获取自己信息成功
BearApplication.getApplication().setSelfProfile(timUserProfile);
}
});
这就是获取自己的信息 , 一下是对TIMUserprofile的一些成员方法介绍 TIMUserProfile 成员方法:
[html] view plain copy/**
* 获取用户的identifier
* @return 用户的identifier
*/
public String getIdentifier()
/**
* 获取用户的昵称
* @return 用户的昵称
*/
public String getNickName()
/**
* 获取用户头像URL
* @return 用户头像URL
*/
public String getFaceUrl()
/**
* 获取用户个人签名
* @return 用户个人签名
*/
public String getSelfSignature()
/**
* 获取用户加好友的选项
* @return 用户好友选项
*/
public TIMFriendAllowType getAllowType()
/**
* 获取用户备注
* @return 用户备注
*/
public String getRemark()
/**
* 获取被加入的好友分组列表
* @return 分组列表
*/
public List<String> getFriendGroups()
/**
* 获取用户自定义信息
* @return 自定义信息Map
*/
public Map<String, byte[]> getCustomInfo()
/**
* 获取用户性别类型
* @return 用户性别类型
*/
public TIMFriendGenderType getGender()
/**
* 获取用户生日信息
* @return 生日信息
*/
public long getBirthday()
/**
* 获取语言
* @return 语言
*/
public long getLanguage()
/**
* 获取位置信息
* @return 位置信息
*/
public String getLocation()
现在我们拿到了自己的信息,然后我们进行自己信息的修改, 这个方法是设置我们的昵称[html] view plain copypublic void setNickName(@NonNull String var1, TIMCallBack var2)
包括系统的字段我们都可以进行set方法进行设置 但是我们的自定义字段怎么设置呢? 请看下面
设置自己的自定义字段
[html] view plain copypublic void setCustomInfo(String key, byte[] value, TIMCallBack cb)key:我们自定义字段的key vakue: 我们自定义字段的value cb: 检测是否成功修改的监听 二。头像的选择 1.还是先上图
[html] view plain copyIntent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
tempUri = Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "image.jpg"));
// 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
startActivityForResult(openCameraIntent, TAKE_PICTURE);
这是我的拍照功能的代码,通过这几行就可以调用相机进行拍照返回的结果在onactivityforresult里面进行处理 [html] view plain copyIntent openAlbumIntent = new Intent(
Intent.ACTION_GET_CONTENT);
openAlbumIntent.setType("image/*");
startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
这个是我们的相册,进行调用的代码, 下面是我们的返回的统一处理 [html] view plain copy@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { // 如果返回码是可以用的
switch (requestCode) {
case 相机的:
startPhotoZoom(tempUri); // 开始对图片进行裁剪处理
break;
case 相册的:
startPhotoZoom(data.getData()); // 开始对图片进行裁剪处理
break;
case 统一裁剪完的图片:
if (data != null) {
setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上
}
break;
}
}
}
startPhotoZoom的处理 [html] view plain copyprotected void startPhotoZoom(Uri uri) {
if (uri == null) {
Log.i("tag", "The uri is not exist.");
}
tempUri = uri;
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 设置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_SMALL_PICTURE);
}
[html] view plain copysetImageToView的处理就是进行图片的保存并上传到服务器
上传我们首先了解一下token是什么 首先Token是一个怎么样的东西,Token存在的意义又在哪里?学过php或是其他web开发的人都知道一个东西叫session和cookie,这些东西可以在服务器或是本地保存一些东西,比如说登录状态,当用户登录后可以通过session或是cookie在本地保存一段时间的登录状态,在这段时间内,用户再度登录的时候就不用再输入用户名和密码了,但是过了一段时间后,用户需要再次进行身份认证,这样一来的话,一方面节省了很多操作的步骤提升了操作体验,同时也节省了很多服务器请求,提高了服务器性能,同时也保证了一定的安全性。那么这个功能如何在android中实现呢?很可惜的是在android中并没有直接提供类似session或cookie的东西,这个时候就是通过Token来完成。Token的存在更像是一个令牌,比如说当我们需要实现具有用户权限的操作时,每一次操作都需要向服务器发送请求,让服务器完成在数据库中进行用户名和密码,这些显然对于服务器的性能是很不利的。当然有人也会说我们可以在一次请求成功后将类似于user_id的东西保存在本地,以后每次请求的时候用user_id进行操作,这样不是就降低了服务器的负担,但是这样的话存在一个问题,就是user_id一旦存储在本地的时候,不是太有可能会自动回收掉,这样一来的话就会导致一个问题,就是app无论何时打开都是验证通过的状态,这样一来安全性降低。而Token就是解决这样一个问题的东西:以上这些话总结一下就是token的定义: Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。 我是用的七牛云进行的头像的上传,我们从服务器上获取我们的token,然后进行头像的上传即可,当然上传这个我放到网路请求的框架这一节来进行详细的讲解
相关文章推荐
- 个人信息页面的修改及头像的裁剪上传
- java读取图片处理实现缩放裁剪,用于个人信息中上传图片自定义头像大小
- 头像上传 模拟(个人信息修改 有头像图片上传 一般 用form 表单提交)
- ASP.NET简单实现APP中用户个人头像上传和裁剪
- 二进制数据流方式实现 个人头像的读取、上传、修改------善良公社项目
- 二进制数据流方式实现 个人头像的读取、上传、修改------善良公社项目
- ASP.NET简单实现APP中用户个人头像上传和裁剪
- sharepoint自定义(Customize)用户信息(userprofile)编辑(edit details)页面调用用户头像(select pictures)上传控件
- android 选择手机图库,实现修改个人资料,头像上传功能,可直接使用
- Android头像上传/拍照/从相册选择Demo(个人信息模块会用到)
- 信息编辑,上传文件编辑、删除,用户个人资料修改程序完成 2004-08-21
- 头像的裁剪修改(可使用摄像头)与上传服务器(SSM实现)
- 个人界面 < 头像 > 图片选择(相册,拍照)--如何调用系统的相册,裁剪并且上传
- Retrofit+RxJava+OkHttp封装类请求接口数据→原生登录,注册,个人信息页+设置用户头像(图片上传或拍照)+SharedPreferences保存信息+Fresco加载图片+Mvp分层
- 项目:个人主页=>用户头像(以及头像裁剪)+用户信息(点点点,查看更多)+滚动加载
- 购物网第二阶段总结笔记5:用户个人资料修改页面、密码修改页面、用户积分页面、用户统计信息页面
- Retrofit+RxJava+OkHttp封装类请求接口数据→原生登录,注册,个人信息页+设置用户头像(图片上传或拍照)+SharedPreferences保存信息+Fresco加载图片+Mvp分层
- CSDN修改个人资料的功能,如果内容不符合交互规则,页面没有提示信息
- 上传图片至服务器,写入到数据库Blob字段中,以及从数据库读取Blob信息(iframe父子页面传值)(2)
- springMVC 头像裁剪上传并等比压