android实践练习_android 练习之路 (八)

------------------------------------------------------------------------

上图

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上传一下代码,不然今天的绿点又没了(笑)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值