本周接下来完成了如下工作:
1. RequestFriendActivity(接上篇博客,当点击“添加到通讯录”时,跳转至此)
单击“发送请求”时,选择好友请求方式为VERIFY_REQUEST(发起好友验证请求)
通过NimClient的getService接口获取到FriendService(好友管理/好友关系/黑名单关系/消息提醒相关操作)服务实例,调用addFriend方法进行好友请求,附上信息msg
package com.ezreal.ezchat.activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.widget.EditText;
import com.ezreal.ezchat.R;
import com.netease.nimlib.sdk.InvocationFuture;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.friend.FriendService;
import com.netease.nimlib.sdk.friend.constant.VerifyType;
import com.netease.nimlib.sdk.friend.model.AddFriendData;
import com.ezreal.ezchat.commonlibrary.utils.ToastUtils;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by 张静
*/
public class RequestFriendActivity extends BaseActivity {
@BindView(R.id.et_request_msg)
EditText mEtRequestMsg;
private RequestCallback<Void> mRequestCallback;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStatusBarColor(R.color.app_blue_color);
setContentView(R.layout.activity_request_friend);
setTitleBar("添加好友",true,false);
ButterKnife.bind(this);
initCallBack();
}
private void initCallBack(){
mRequestCallback = new RequestCallbackWrapper<Void>() {
@Override
public void onResult(int code, Void result, Throwable exception) {
if (exception != null){
ToastUtils.showMessage(RequestFriendActivity.this,"请求出错,请重试:" + exception.getMessage());
}else {
if (code == 200){
ToastUtils.showMessage(RequestFriendActivity.this,"请求已发出~");
finish();
}else {
ToastUtils.showMessage(RequestFriendActivity.this,"请求异常,请重试,异常代码:" + code);
}
}
}
};
}
@OnClick(R.id.tv_send_request)
public void sendRequest(){
String account = getIntent().getStringExtra("account");
String msg = "";
if (mEtRequestMsg.getText() != null){
msg = mEtRequestMsg.getText().toString().trim();
}
VerifyType type = VerifyType.VERIFY_REQUEST;
InvocationFuture<Void> addFriend = NIMClient.getService(FriendService.class)
.addFriend(new AddFriendData(account, type, msg));
addFriend.setCallback(mRequestCallback);
}
}
2. activity_request_friend.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<include layout="@layout/title_layout"/>
<EditText
android:id="@+id/et_request_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:hint="@string/request_friend_hint"
android:textColorHint="@color/hint_color"
android:background="@drawable/et_back_ground"/>
<TextView
android:id="@+id/tv_send_request"
android:layout_marginTop="10dp"
android:gravity="center"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/app_blue_color"
android:textColor="@color/white_color"
android:text="@string/send_request"/>
</LinearLayout>
3. 继续接上篇中ContractFragment的内容,加载好友列表(loadFriendList)
通过NimFriendHandler获得好友信息,notifyDataSetChanged使如果适配器内容改变时需强制调用getView来刷新每个Item内容
private void loadFriendList() {
mFriendList.clear();
mFriendList.addAll(NimFriendHandler.getInstance().getFriendInfos());
mViewAdapter.notifyDataSetChanged();
}
4. 点击“添加朋友”,跳转至SearchUserActivity(根据账户搜索用户)
@OnClick(R.id.layout_add_friend)
public void addFriend() {
startActivity(new Intent(getContext(), SearchUserActivity.class));
}
5. 点击“验证提醒”,跳转至CheckNotifyListActivity
@OnClick(R.id.layout_msg_notify)
public void openMsgNotifyActivity() {
//hindUnReadMsgView();
startActivityForResult(new Intent(getContext(),
CheckNotifyListActivity.class), REQUEST_CHECK_NOTI);
}
6. 得到新打开的Activity关闭后返回的数据
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CHECK_NOTI) {
if (resultCode == CheckNotifyListActivity.RESULT_HAVE_CHANGE) {
loadFriendList();
}
}
}
附上完整ContractFragment.java
package com.ezreal.ezchat.fragment;
import android.content.Intent;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Toast;
//import com.ezreal.chat.MainActivity;
import com.ezreal.ezchat.R;
import com.ezreal.ezchat.activity.FriendInfoActivity;
import com.ezreal.ezchat.activity.CheckNotifyListActivity;
import com.ezreal.ezchat.activity.SearchUserActivity;
import com.ezreal.ezchat.handler.NimFriendHandler;
import com.ezreal.ezchat.handler.NimFriendHandler.OnFriendUpdateListener;
import com.ezreal.ezchat.handler.NimSysMsgHandler;
import com.ezreal.ezchat.handler.NimSysMsgHandler.SystemMessageListener;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.ezreal.ezchat.commonlibrary.adapter.OnItemClickListener;
import com.ezreal.ezchat.commonlibrary.adapter.RViewHolder;
import com.ezreal.ezchat.commonlibrary.adapter.RecycleViewAdapter;
import com.ezreal.ezchat.commonlibrary.utils.TextUtils;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* Created by 张静
*/
public class ContractFragment extends BaseFragment {
public static final int REQUEST_CHECK_NOTI = 0x5000;
@BindView(R.id.rcv_friend)
RecyclerView mRecyclerView;
private List<NimUserInfo> mFriendList;
private RecycleViewAdapter<NimUserInfo> mViewAdapter;
@Override
public int setLayoutID() {
return R.layout.fragment_contract;
}
@Override
public void initView(View rootView) {
ButterKnife.bind(this, rootView);
mFriendList = new ArrayList<>();
mViewAdapter = new RecycleViewAdapter<NimUserInfo>(getContext(), mFriendList) {
@Override
public int setItemLayoutId(int position) {
return R.layout.item_friend;
}
@Override
public void bindView(RViewHolder holder, int position) {
NimUserInfo item = mFriendList.get(position);
holder.setImageByUrl(getContext(), R.id.iv_head_picture,
item.getAvatar(), R.mipmap.bg_img_defalut);
holder.setText(R.id.tv_friend_nick, item.getName());
}
};
mViewAdapter.setItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(RViewHolder holder, int position) {
Intent intent = new Intent(getContext(), FriendInfoActivity.class);
intent.putExtra("NimUserInfo", mFriendList.get(position));
intent.putExtra("FLAG", FriendInfoActivity.FLAG_SHOW_FRIEND);
startActivity(intent);
}
});
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.setAdapter(mViewAdapter);
NimFriendHandler.getInstance().setUpdateListener(new OnFriendUpdateListener() {
@Override
public void friendUpdate() {
loadFriendList();
}
});
loadFriendList();
}
private void loadFriendList() {
mFriendList.clear();
mFriendList.addAll(NimFriendHandler.getInstance().getFriendInfos());
mViewAdapter.notifyDataSetChanged();
}
@OnClick(R.id.layout_add_friend)
public void addFriend() {
startActivity(new Intent(getContext(), SearchUserActivity.class));
}
@OnClick(R.id.layout_msg_notify)
public void openMsgNotifyActivity() {
//hindUnReadMsgView();
startActivityForResult(new Intent(getContext(),
CheckNotifyListActivity.class), REQUEST_CHECK_NOTI);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CHECK_NOTI) {
if (resultCode == CheckNotifyListActivity.RESULT_HAVE_CHANGE) {
loadFriendList();
}
}
}
}