------------------------------------------------------------------------
上图
PS:也不知道为什么,自从加了融云之后在虚拟机里使用的时候一直会报俩错,估计应该是跟6.0的适配有关吧,不过真机不报错,并且也不影响使用,那就先这样放着吧
PPS:一开始账号打错了,我还真是老年人记忆力......囧
今天使用Bmob来实现好友关系的存储,融云的IM来实现好友间的聊天
先做好准备工作,融云的依赖添加好,首先是下最新的kit包,然后导入两个module,并且添加依赖
//融云IM依赖
compile project(':IMKit')
这里还有一些相关的设置,暂且不说,官网上有文档
这还不算完,因为这个程序里我们没有后台(竞赛提交作品要能直接演示,当然了,客观原因是我也不是很喜欢挂后台,挺麻烦的),所以我们得在客户端里实现后台的功能,所以我们需要导入一些融云的工具类
它们在哪下载呢,可以下载一个java的融云的后台demo,然后把其中的io.rong包复制过来,粘贴到项目里
这就算把先头工作做的差不多了,然后一步一步来
还是类似上一个活动模块的布局样式
activity_friend_info_fragm.xml
布局完了就是跟一个Activity
FriendInfoFragmActivity.java
public class FriendInfoFragmActivity extendsFragment {public staticFriendInfoFragmActivity newInstance() {return newFriendInfoFragmActivity();
}
@Nullable
@OverridepublicView onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.activity_friend_info_fragm, container, false);//Fragment+ViewPager+FragmentViewPager组合的使用
ViewPager viewPager =(ViewPager) view.findViewById(R.id.friendViewPaper);
FriendPagerAdapter adapter= newFriendPagerAdapter(getActivity().getSupportFragmentManager(), getContext());
viewPager.setAdapter(adapter);//TabLayout
TabLayout tabLayout =(TabLayout) view.findViewById(R.id.friendTabLayout);
tabLayout.setupWithViewPager(viewPager);returnview;
}
}
接着是建一个viewpager的adapter
FriendPagerAdapter.java
public class FriendPagerAdapter extendsFragmentPagerAdapter {public final int COUNT = 2;private String[] titles = new String[]{"消息列表", "我的好友"};privateContext context;privateFragment conversationList;private Fragment conversationFragment = null;publicFriendPagerAdapter(FragmentManager fm, Context context) {super(fm);this.context =context;
}
@Overridepublic Fragment getItem(intposition) {if(position==0){
conversationList= initConversationList();//获取融云会话列表的对象
returnconversationList;
}else if(position==1){returnFriendPageFragment.newInstance();
}return null;
}
@Overridepublic intgetCount() {returnCOUNT;
}
@Overridepublic CharSequence getPageTitle(intposition) {returntitles[position];
}privateFragment initConversationList() {/*** appendQueryParameter对具体的会话列表做展示*/
if (conversationFragment == null) {
ConversationListFragment listFragment= newConversationListFragment();
Uri uri= Uri.parse("rong://" +context.getPackageName()).buildUpon()
.appendPath("conversationList")
.appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(),"false")//设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "true")//.appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号//.appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//公共服务号
.appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "false")//设置私聊会话是否聚合显示
.appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "false")//设置私聊会是否聚合显示
.build();
listFragment.setUri(uri);returnlistFragment;
}else{returnconversationFragment;
}
}
}
左边是消息列表,这个用融云的消息列表,右边是好友列表,就需要我们自己定义了
从左至右吧
融云的消息列表
activity_conversation.xml
然后是Activity
(不是我说,这个命名是真的有毒,这个类是从融云提供的demo上摘下来的,不过反正是他们内部实现的东西,先不改得了,忙完这两天再一起弄)
public class ConversationActivity extendsFragmentActivity {privateTextView mName;//private ImageView mPersionInformationIv;
privateConversation.ConversationType mConversationType;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversation);
Intent intent=getIntent();
mConversationType=Conversation.ConversationType.valueOf(intent.getData().getLastPathSegment().toUpperCase(Locale.getDefault()));//Log.e("log", mConversationType.getName());
mName =(TextView) findViewById(R.id.name);/*mPersionInformationIv = (ImageView) findViewById(R.id.persionInformationIv);
if(mConversationType.getName().equals("private")){
mPersionInformationIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent = new Intent(getApplicationContext(),UserInformationPage.class);
Bundle bundle=new Bundle();
bundle.putString("userNickName", getIntent().getData().getQueryParameter("title"));
mIntent.putExtras(bundle);
startActivity(mIntent);
}
});
}else if(mConversationType.getName().equals("discussion")){
mPersionInformationIv.setVisibility(View.GONE);
}*/String sId= getIntent().getData().getQueryParameter("targetId");//targetId:单聊即对方ID,群聊即群组ID
String sName = getIntent().getData().getQueryParameter("title");//获取昵称
if (!TextUtils.isEmpty(sName)){
mName.setText(sName);
}else{//sId//TODO 拿到id 去请求自己服务端
}
}
}
然后这个界面注册的方式不一样,这里也贴一下,其实官方文档有写
然后就是好友列表的实现
activity_friend_list.xml
item_friend_info.xml
左边直接new一个融云的会话列表就行,但是右边需要自己写
FriendPageFragment.java
public class FriendPageFragment extends Fragment implementsRongIM.UserInfoProvider{privateSwipeRefreshLayout friendSwipeRefreshLayout;privateFriendInfoListAdapter adapter;private ListloginUserFriendInfoList;private ListloginUserFriendRongList;privateRecyclerView friendRecyclerView;private String loginUserFriendObjectID="";private final int GETLOGINUSERFRIENDOBJECTID=0x00,GETLOGINUSERFRIENDLIST=0x01,FRIENDINFORMATIONLISTDOWNOVER=0x02;private Handler handler = newHandler(){
@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what){caseGETLOGINUSERFRIENDOBJECTID:
getLoginUserFriendObjectID();break;caseGETLOGINUSERFRIENDLIST:
getLoginUserFriendList();break;caseFRIENDINFORMATIONLISTDOWNOVER:
loadFriendRecycleView();
initUserInfo();
friendSwipeRefreshLayout.setRefreshing(false);break;
}
}
};public staticFriendPageFragment newInstance() {
FriendPageFragment fragment= newFriendPageFragment();returnfragment;
}
@Overridepublic voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
}
@Nullable
@OverridepublicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.activity_friend_list,container,false);
friendSwipeRefreshLayout=(SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_friend);
friendSwipeRefreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {
@Overridepublic voidonRefresh() {
handler.sendEmptyMessage(GETLOGINUSERFRIENDLIST);
}
});
friendRecyclerView=(RecyclerView) view.findViewById(R.id.recycler_friend);
LinearLayoutManager layoutManager= newLinearLayoutManager(getActivity());
friendRecyclerView.setLayoutManager(layoutManager);
handler.sendEmptyMessage(GETLOGINUSERFRIENDOBJECTID);returnview;
}/*** 获取用户好友列表的数据库表单中ID*/
private voidgetLoginUserFriendObjectID(){final BmobQuery userObjectIDQuery = new BmobQuery();
userObjectIDQuery.addWhereEqualTo("userID", BmobUser.getCurrentUser(UserInfo.class).getUserPhone());
userObjectIDQuery.findObjects(new FindListener() {
@Overridepublic void done(Listobject, BmobException e) {if(e==null){
loginUserFriendObjectID=object.get(0).getObjectId();//Toast.makeText(getContext(), "loginUserFriendObjectID"+loginUserFriendObjectID, Toast.LENGTH_SHORT).show();
handler.sendEmptyMessage(GETLOGINUSERFRIENDLIST);
}else{
}
}
});
}/***获取用户好友列表数据*/
private voidgetLoginUserFriendList(){
UserFriend userFriend= newUserFriend();//查询好友列表内的所有用户,因此查询的是用户表
BmobQuery userFriendQuery = new BmobQuery();
userFriend.setObjectId(loginUserFriendObjectID);//userFriend是UserFriend表中的字段,用来存储所有该用户的好友关系的用户
userFriendQuery.addWhereRelatedTo("userFriend", newBmobPointer(userFriend));
userFriendQuery.findObjects(new FindListener() {
@Overridepublic void done(Listobject,BmobException e) {if(e==null){
loginUserFriendInfoList=object;
Log.e("taggg", loginUserFriendInfoList.size()+"");
Log.e("taggg", loginUserFriendInfoList.get(0).getUserNickname()+"");//Toast.makeText(getContext(), "成功加载好友列表数据"+userFriendInformationList.size(), Toast.LENGTH_SHORT).show();
handler.sendEmptyMessage(FRIENDINFORMATIONLISTDOWNOVER);
}else{
Toast.makeText(getContext(),"加载好友列表数据失败"+e, Toast.LENGTH_SHORT).show();
}
}
});
}/*** 加载好友信息至RecycleView*/
private voidloadFriendRecycleView(){
adapter= newFriendInfoListAdapter(getContext(),loginUserFriendInfoList,friendRecyclerView);
adapter.setOnItemClickListener(newFriendInfoListAdapter.OnItemClickListener() {
@Overridepublic void onItemClick(View view, intposition) {
RongIM.getInstance().startPrivateChat(getContext(), loginUserFriendInfoList.get(position).getUserPhone(), loginUserFriendInfoList.get(position).getUserNickname());
}
});
friendRecyclerView.setAdapter(adapter);
}/*** 储存好友相关信息:id,昵称,token*/
private voidinitUserInfo() {
loginUserFriendRongList= new ArrayList();
loginUserFriendRongList.add(new Friend(BmobUser.getCurrentUser(UserInfo.class).getUserPhone(),BmobUser.getCurrentUser(UserInfo.class).getUserNickname(),BmobUser.getCurrentUser(UserInfo.class).getUserAvatar()));for(UserInfo userFriendInfo:loginUserFriendInfoList){//好友内容为:id,昵称,头像url
loginUserFriendRongList.add(newFriend(userFriendInfo.getUserPhone(),userFriendInfo.getUserNickname(),userFriendInfo.getUserAvatar()));
}
RongIM.setUserInfoProvider(this, true);
}
@Overridepublicio.rong.imlib.model.UserInfo getUserInfo(String s) {for(Friend i : loginUserFriendRongList) {if(i.getUserId().equals(s)) {//Log.e(TAG, i.getPortraitUri());
return newio.rong.imlib.model.UserInfo(i.getUserId(), i.getName(), Uri.parse(i.getPortraitUri()));
}
}return null;
}
}
然后就需要写一个RecycleView的Adapter了
FriendInfoListAdapter.java
public class FriendInfoListAdapter extends RecyclerView.Adapter{private ListloginUserFriendInfoList;privateContext context;privateRecyclerView recyclerView;privateOnItemClickListener onItemClickListener;static class ViewHolder extendsRecyclerView.ViewHolder{privateImageView userAvatarImg;privateTextView userNameTv;publicViewHolder(View view){super(view);
userAvatarImg=(ImageView) view.findViewById(R.id.item_useravatar);
userNameTv=(TextView) view.findViewById(R.id.item_username);
}
}public FriendInfoListAdapter(Context context,ListloginUserFriendInfoList,RecyclerView recyclerView){this.context =context;this.loginUserFriendInfoList =loginUserFriendInfoList;this.recyclerView =recyclerView;
}
@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, intviewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_friend_info,parent,false);
ViewHolder holder= newViewHolder(view);returnholder;
}
@Overridepublic void onBindViewHolder(final FriendInfoListAdapter.ViewHolder holder, final intposition) {
holder.setIsRecyclable(false);final UserInfo friendInfo =loginUserFriendInfoList.get(position);
Glide.with(context).load(friendInfo.getUserAvatar()).bitmapTransform(newCropCircleTransformation(context)).into(holder.userAvatarImg);
holder.userNameTv.setText(friendInfo.getUserNickname());if(onItemClickListener != null){//为ItemView设置监听器
holder.itemView.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {int position =holder.getLayoutPosition();
onItemClickListener.onItemClick(holder.itemView,position);
}
});
}
}
@Overridepublic intgetItemCount() {returnloginUserFriendInfoList.size();
}/*** 点击事件接口*/
public interfaceOnItemClickListener{void onItemClick(View view, intposition);
}/*** 设置点击事件方法*/
public voidsetOnItemClickListener(OnItemClickListener onItemClickListener){this.onItemClickListener =onItemClickListener;
}
}
然后回头看一眼,首先在MainActivity里应该初始化融云的服务
RongIM.init(this);
initUserToken();
/*** 获取融云所需userID及token*/
private voidinitUserToken(){
UserInfo loginUser= BmobUser.getCurrentUser(UserInfo.class);
userID=loginUser.getUserPhone();
connectRongServer(loginUser.getRongToken());
}/*** 初始化登录用户的融云服务*/
private voidconnectRongServer(String token) {
RongIM.connect(token,newRongIMClient.ConnectCallback() {
@Overridepublic voidonSuccess(String userId) {if(userId.equals(userID)){
Toast.makeText(getApplicationContext(), userID+"成功连接", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), userID+"连接失败", Toast.LENGTH_SHORT).show();
}
}
@Overridepublic voidonError(RongIMClient.ErrorCode errorCode) {//Log.e("onError", "onError userid:" + errorCode.getValue());//获取错误的错误码
Toast.makeText(getApplicationContext(), "Error", Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "connect failure errorCode is : " +errorCode.getValue());
}
@Overridepublic voidonTokenIncorrect() {
Toast.makeText(getApplicationContext(),"TokenError", Toast.LENGTH_SHORT).show();
Log.e("MainActivity", "token is error ,please check token and appkey");
}
});
}
实体类也需要完善一下了,我们现在还有很多其他需要的字段,以及融云所需的好友实体
UserInfo.java
public class UserInfo extendsBmobUser {privateString userNickname;privateString userPhone;privateString rongToken;//用户头像,先设置初始头像
private String userAvatar="http://bmob-cdn-8854.b0.upaiyun.com/2017/01/21/910615c0405f9bd280350b57f8dc180c.png";publicString getUserNickname() {returnuserNickname;
}public voidsetUserNickname(String userNickname) {this.userNickname =userNickname;
}publicString getUserPhone() {returnuserPhone;
}public voidsetUserPhone(String userPhone) {this.userPhone =userPhone;
}publicString getRongToken() {returnrongToken;
}public voidsetRongToken(String rongToken) {this.rongToken =rongToken;
}publicString getUserAvatar() {returnuserAvatar;
}public voidsetUserAvatar(String userAvatar) {this.userAvatar =userAvatar;
}
}
UserFriend.java
public class UserFriend extendsBmobObject {privateString userID;privateBmobRelation userFriend;publicBmobRelation getUserFriend() {returnuserFriend;
}public voidsetUserFriend(BmobRelation userFriend) {this.userFriend =userFriend;
}publicString getUserID() {returnuserID;
}public voidsetUserID(String userID) {this.userID =userID;
}
}
Friend.java
public classFriend {privateString userId;privateString name;privateString portraitUri;publicString getUserId() {returnuserId;
}public voidsetUserId(String userId) {this.userId =userId;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getPortraitUri() {returnportraitUri;
}public voidsetPortraitUri(String portraitUri) {this.portraitUri =portraitUri;
}publicFriend(String userId, String name, String portraitUri) {this.userId =userId;this.name =name;this.portraitUri =portraitUri;
}
}
行,然后把注册类完善一下
RegisterActivity.java
public class RegisterActivity extends BaseActivity implementsView.OnClickListener{privateEditText usernameEt,passwordEt,userPhoneEt,userNicknameEt;privateButton registerBtn,loginBtn;privateUserInfo userInformation;private String rongToken="",userID="";private final int ISREGISTER=0x00,GETRONGTOKEN=0x01,ALLSUCCESS=0x02,FAIL=0x03,BUILDUSERFRIENDLIST=0x04;private Handler handler = newHandler(){
@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what){caseISREGISTER:
isRegister();break;caseGETRONGTOKEN:newgetRongToken(userPhoneEt.getText().toString().trim(),userNicknameEt.getText().toString().trim()).start();break;caseBUILDUSERFRIENDLIST:
buildUserFriendList();break;caseALLSUCCESS:
register();break;caseFAIL:
Toast.makeText(RegisterActivity.this,"获取Token失败 请检查网络和账号后重试", Toast.LENGTH_SHORT).show();break;
}
}
};
@Overrideprotected voidinitVariablesAndService() {
setIfImmersive(true);
Bmob.initialize(this,"8da888d03200ff2f6b403d064b805d60");
}
@Overrideprotected voidinitViews(Bundle savedInstanceState) {
setContentView(R.layout.activity_register);
usernameEt=(EditText) findViewById(R.id.register_usernameEt);
passwordEt=(EditText) findViewById(R.id.register_passwordEt);
userPhoneEt=(EditText) findViewById(R.id.register_userPhoneEt);
userNicknameEt=(EditText) findViewById(R.id.register_userNicknameEt);
registerBtn=(Button) findViewById(R.id.register_registerBtn);
registerBtn.setOnClickListener(this);
loginBtn=(Button) findViewById(R.id.register_loginBtn);
loginBtn.setOnClickListener(this);
}
@Overridepublic voidonClick(View v) {switch(v.getId()){caseR.id.register_registerBtn:
userID=userPhoneEt.getText().toString().trim();
handler.sendEmptyMessage(ISREGISTER);break;caseR.id.register_loginBtn:
startActivity(LoginActivity.class);this.finish();break;
}
}/*** 判断账号是否已被注册*/
private voidisRegister(){
String username=usernameEt.getText().toString().trim();
BmobQuery query = new BmobQuery();
query.addWhereEqualTo("username",username);
query.findObjects(new FindListener() {
@Overridepublic void done(Listlist, BmobException e) {if (e==null&&list.size()==0){
handler.sendEmptyMessage(GETRONGTOKEN);
}else{
Toast.makeText(RegisterActivity.this,"您的账号已被使用 请更换", Toast.LENGTH_SHORT).show();
}
}
});
}/*** 注册账号至bmob*/
private voidregister(){
userInformation= newUserInfo();
userInformation.setUsername(usernameEt.getText().toString().trim());
userInformation.setPassword(passwordEt.getText().toString().trim());
userInformation.setUserPhone(userPhoneEt.getText().toString().trim());
userInformation.setUserNickname(userNicknameEt.getText().toString().trim());
userInformation.setRongToken(rongToken);
userInformation.signUp(new SaveListener() {
@Overridepublic voiddone(UserInfo s, BmobException e) {if(e==null){
Toast.makeText(RegisterActivity.this,"注册成功", Toast.LENGTH_SHORT).show();
userInformation.login(new SaveListener() {
@Overridepublic voiddone(UserInfo userInfo, BmobException e) {if(e==null){
Toast.makeText(RegisterActivity.this,"登录成功", Toast.LENGTH_SHORT).show();
startActivity(MainActivity.class);
RegisterActivity.this.finish();
}
}
});
}else{
Log.e("失败代码",e.toString());
}
}
});
}class getRongToken extendsThread{
String userId;//定义线程内变量
String name;
User rongAppInformation= new User("cpj2xarlc68cn", "9gRSABvb08W3YC");//融云APP信息
String Token = "";public getRongToken(String userId, String name){//定义带参数的构造函数,达到初始化线程内变量的值
this.userId=userId;this.name=name;
}
@Overridepublic voidrun() {try{//使用默认头像,但函数需要三参
Token=rongAppInformation.getToken(userId,name,"http://bmob-cdn-8854.b0.upaiyun.com/2017/01/21/910615c0405f9bd280350b57f8dc180c.png").getToken();
rongToken=Token ;//消息内容
handler.sendEmptyMessage(BUILDUSERFRIENDLIST);
}catch(Exception e) {
e.printStackTrace();
handler.sendEmptyMessage(FAIL);
}
}
}/*** 如果用户此前没有生成好友列表的情况下,执行方法生成好友列表*/
private voidbuildUserFriendList(){
String loginUserID=userID;
UserFriend userFriend= newUserFriend();
userFriend.setUserID(loginUserID);
BmobRelation relation= newBmobRelation();
userFriend.setUserFriend(relation);
userFriend.save(new SaveListener() {
@Overridepublic voiddone(String s, BmobException e) {if(e==null){//Toast.makeText(getApplicationContext(), "执行", Toast.LENGTH_SHORT).show();
handler.sendEmptyMessage(ALLSUCCESS);
}else{//Toast.makeText(getApplicationContext(), e+"错误", Toast.LENGTH_SHORT).show();
}
}
});
}
}
然后还是要加个添加好友的页面,样式大概就先做到和之前的那个添加活动差不多吧
activity_friend_add.xml
FriendAddActivity.java
public class FriendAddActivity extends BaseActivity implementsView.OnClickListener{privateEditText friendAddEt;privateTextView friendAddTv;privateImageView friendAddBackBtn;privateLinearLayout friendAddLinLayout,friendAddAskView;private String loginUserFriendObjectID="",loginUserFriendFriendObjectID="";privateUserInfo searchUser;private String searchUserAvatarUrl="",searchUserNickname="";//用于标记是否已显示用户信息
private int flag = 0;final int ADDFRIENDASK = 0x00, DELFRIENDASK = 0x01, IFGETFRIENDLIST = 0x02, SEARCHUSERINFO = 0x03 ,SAVEUSERFRIENDLIST=0x04,GETFRIENDFRIENDOBJECT=0x05,SAVEFRIENDFRIENDLIST=0x06;private Handler handler = newHandler() {
@Overridepublic voidhandleMessage(Message msg) {super.handleMessage(msg);switch(msg.what) {caseIFGETFRIENDLIST:
searchUserFriendObjectId();break;caseSEARCHUSERINFO:
searchUserInfo(friendAddEt.getText().toString());break;caseADDFRIENDASK:if (flag == 1) {
friendAddLinLayout.removeView(friendAddAskView);
flag= 0;
}
friendAddLinLayout.addView(addFriendAddAskView(searchUserAvatarUrl, searchUserNickname));
flag= 1;break;caseSAVEUSERFRIENDLIST:
addFriend();break;caseDELFRIENDASK:
friendAddLinLayout.removeView(friendAddAskView);break;caseGETFRIENDFRIENDOBJECT:
searchFriendFriendInformation();break;caseSAVEFRIENDFRIENDLIST:
saveFriendFriendList();break;
}
}
};
@Overrideprotected voidinitVariablesAndService() {
}
@Overrideprotected voidinitViews(Bundle savedInstanceState) {
setContentView(R.layout.activity_friend_add);
friendAddEt=(EditText) findViewById(R.id.friend_addEt);
friendAddTv=(TextView) findViewById(R.id.friend_addBtn);
friendAddBackBtn=(ImageView) findViewById(R.id.friend_add_backBtn);
friendAddLinLayout=(LinearLayout) findViewById(R.id.friend_add_linearlayout);
friendAddTv.setOnClickListener(this);
friendAddBackBtn.setOnClickListener(this);
handler.sendEmptyMessage(IFGETFRIENDLIST);
}/*** bmob查询登录用户好友表ID*/
private voidsearchUserFriendObjectId() {final BmobQuery query = new BmobQuery();
query.addWhereEqualTo("userID", BmobUser.getCurrentUser(UserInfo.class).getUserPhone());
query.findObjects(new FindListener() {
@Overridepublic void done(Listobject, BmobException e) {if (e == null) {
loginUserFriendObjectID= object.get(0).getObjectId();
}
}
});
}/*** bmob查询某用户信息*/
private voidsearchUserInfo(String userNickname) {
BmobQuery query = new BmobQuery();
query.addWhereEqualTo("userNickname", userNickname);
query.findObjects(new FindListener() {
@Overridepublic void done(Listobject, BmobException e) {if (e == null) {
searchUser= object.get(0);
searchUserAvatarUrl=searchUser.getUserAvatar();
searchUserNickname=searchUser.getUserNickname();
handler.sendEmptyMessage(ADDFRIENDASK);//Toast.makeText(getApplicationContext(), user.getNickName()+"查询成功", Toast.LENGTH_SHORT).show();
} else{//Toast.makeText(getApplicationContext(), "查询失败"+e, Toast.LENGTH_SHORT).show();
}
}
});
}/*** 动态生成是否添加好友(显示用户信息)的控件*/
privateLinearLayout addFriendAddAskView(String searchUserAvatarUrl, String searchUserNickname) {
friendAddAskView= new LinearLayout(this);
friendAddAskView.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams llparams= newLinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
friendAddAskView.setLayoutParams(llparams);
ImageView touxiang= new ImageView(this);
Glide.with(getApplicationContext()).load(searchUserAvatarUrl).into(touxiang);
LinearLayout.LayoutParams txparams= new LinearLayout.LayoutParams(100, 100);
txparams.setMargins(30, 15, 15, 15);
touxiang.setLayoutParams(txparams);
LinearLayout.LayoutParams unparams= newLinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
unparams.setMargins(30, 0, 30, 0);
TextView userName= new TextView(this);
userName.setText(searchUserNickname);
userName.setLayoutParams(unparams);
userName.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams btnparams= newLinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
btnparams.setMargins(30, 0, 30, 0);
Button add= new Button(this);//add.setBackgroundResource(R.drawable.background_button);
add.setTextColor(Color.WHITE);
add.setGravity(Gravity.CENTER);
add.setText("添加好友");
add.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {
handler.sendEmptyMessage(SAVEUSERFRIENDLIST);
}
});
add.setLayoutParams(btnparams);
Button noAdd= new Button(this);//noAdd.setBackgroundResource(R.drawable.background_button);
noAdd.setTextColor(Color.WHITE);
noAdd.setGravity(Gravity.CENTER);
noAdd.setText("取消");
noAdd.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {
handler.sendEmptyMessage(DELFRIENDASK);
}
});
noAdd.setLayoutParams(btnparams);
friendAddAskView.addView(touxiang);
friendAddAskView.addView(userName);
friendAddAskView.addView(add);
friendAddAskView.addView(noAdd);returnfriendAddAskView;
}/*** 储存登录用户好友关系*/
private voidaddFriend(){
UserFriend userFriend= newUserFriend();
userFriend.setObjectId(loginUserFriendObjectID);
BmobRelation relation= newBmobRelation();//将当前用户添加到多对多关联中
relation.add(searchUser);//多对多关联指向`post`的`likes`字段
userFriend.setUserFriend(relation);
userFriend.update(newUpdateListener() {
@Overridepublic voiddone(BmobException e) {if (e == null) {//Toast.makeText(getApplicationContext(), "更新登录用户好友列表成功", Toast.LENGTH_SHORT).show();
handler.sendEmptyMessage(GETFRIENDFRIENDOBJECT);
}else{//Toast.makeText(getApplicationContext(), e+"添加失败", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), loginUserFriendObjectID, Toast.LENGTH_SHORT).show();
}
}
});
}/*** bmob查询想添加为好友的用户的好友信息*/
private voidsearchFriendFriendInformation() {final BmobQuery query = new BmobQuery();
query.addWhereEqualTo("userID", searchUser.getUserPhone());
query.findObjects(new FindListener() {
@Overridepublic void done(Listobject, BmobException e) {if (e == null) {
loginUserFriendFriendObjectID= object.get(0).getObjectId();
handler.sendEmptyMessage(SAVEFRIENDFRIENDLIST);
}else{
}
}
});
}/*** 储存好友用户好友关系*/
private voidsaveFriendFriendList(){
UserFriend userFriend= newUserFriend();
userFriend.setObjectId(loginUserFriendFriendObjectID);
BmobRelation relation= newBmobRelation();//将当前用户添加到多对多关联中
relation.add(BmobUser.getCurrentUser(UserInfo.class));//多对多关联指向`post`的`likes`字段
userFriend.setUserFriend(relation);
userFriend.update(newUpdateListener() {
@Overridepublic voiddone(BmobException e) {if (e == null) {
Toast.makeText(getApplicationContext(),"成功添加好友", Toast.LENGTH_SHORT).show();
finish();
}else{//Toast.makeText(getApplicationContext(), e+"添加失败", Toast.LENGTH_SHORT).show();
Log.e("错误",e+"");
Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_SHORT).show();
}
}
});
}
@Overridepublic voidonClick(View v) {switch(v.getId()){caseR.id.friend_addBtn:
handler.sendEmptyMessage(SEARCHUSERINFO);break;caseR.id.friend_add_backBtn:
finish();break;
}
}
}
行,先告一段落吧,快凌晨了,赶着去github上传一下代码,不然今天的绿点又没了(笑)