盒子
盒子
文章目录
  1. 原理
  2. 添加
  3. 搜寻
  4. 逻辑
  5. 效果

Android高仿微信之mvp实现(三)

前面说到如何使用小米的推送来实现简单的聊天系统,虽然简单实现了,但是对于你们来说想要真正的体验效果就只能跟我互动,为了解决这个缺点,我最近完善了下,增加了添加朋友的功能,这样你们就可以自己拿两个测试机互相测试。就能体验整个过程,下面还是简单的说下。

原理

其实主要用到的就是对数据库的操作,但我这里不讲对数据库方面的操作,因为这方面的内容有点多,就不到这里展开,以后有时间再展开。上篇文章Android高仿微信之mvp实现(二)已经讲到,当我们使用该软件是必须先注册,在注册的时候我们已经向所有安装该应用的设备发送了一条包装了我们设备标识(regId)、用户名(userName)、账号(userPhone)。只要是注册信息我们就会把它存储到本地数据库register表。现在我们就是从register中通过userPhone标识查询你要添加的朋友是否存在,存在就显示,当执行添加操作时,也要判断是否已经添加了该好友,没有的话就执行最后的添加操作,向该用户发送一条添加好友的请求信息,同时把该用户的相关信息添加到聊天记录界面的数据表。为了简单,我这里取了一点巧,只要对方接受到添加好友请求信息,对方就默认添加了自己为好友,无需进行判断是否接受请求。这样就完成了整个的添加操作,下面展示一点代码。

添加

这里主要是输入要添加的账户号,因为我使用的是MVP模式,代码过多所以我这里把一些接口方法贴出了,具体的可以查看源码。

View

1
2
3
4
5
6
7
8
9
10
11
public interface AddFriendsView {
void showSearch();
void goneSearch();
void jumpSearchResult(String text);
void changeText(CharSequence text);
void showToast(String text);
}

Presenter

1
2
3
4
5
public interface AddFriendsPresenter {
void switchView(CharSequence text);
void switchActicity(TextView searchContent, RegisterDataHelper helper);
}

因为该界面没有对应数据的操作等,只是简单的界面显示,所以没有Model

搜寻

这里也是接口

View

1
2
3
4
5
6
7
8
9
public interface SearchResultView {
void succeedToFinish();
void hideProgressDialog(ProgressDialog pd);
void showSucceedToast();
void showErrorToast();
}

Presenter

1
2
3
public interface SearchResultPresenter {
void checkSelection(Context context, String number, View view, SearchResultAdapter mAdapter);
}

Model

1
2
3
public interface SearchResultModel {
void buildDialog(Context context, String number, View view, SearchResultAdapter adapter,SearchResultModelImp.requestListener listener);
}

逻辑

下面是执行添加的主要核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@Override
public void buildDialog(final Context context, String number, final View view,
final SearchResultAdapter adapter, final requestListener listener) {
new AlertDialog.Builder(context)
.setIcon(R.drawable.icon)
.setTitle(R.string.dialog_tip)
.setMessage(String.format(context.getResources().getString(R.string.dialog_message), number))
.setPositiveButton(R.string.dialog_positive, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Cursor cursor = adapter.getCursor();
if (cursor.moveToPosition(view.getId())) {
String number = CursorUtils.formatString(cursor, RegisterDataHelper.RegisterDataInfo.NUMBER);
String regId = CursorUtils.formatString(cursor, RegisterDataHelper.RegisterDataInfo.REGID);
String userName = CursorUtils.formatString(cursor, RegisterDataHelper.RegisterDataInfo.USER_NAME);
WXDataHelper wxHelper = new WXDataHelper(context);
Cursor wxCursor = wxHelper.query(number, regId, userName);
if (wxCursor.getCount() > 0 || (number.equals(SPUtils.getString("userPhone"))
&& regId.equals(SPUtils.getString("regId")))) {
ToastUtils.showShort("你已经添加了该好友!");
} else {
//发送添加好友请求
pd = ProgressDialog.show(context, "添加请求中...", "请稍后...", true);
request(userName, number, regId, listener, cursor);
}
wxCursor.close();
}
}
})
.setNegativeButton(R.string.dialog_negative, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).show();
}

最后看下操作效果吧

效果

picture

项目地址:https://github.com/idisfkj/HightCopyWX

转载请指明出处 idisfkj博客:https://idisfkj.github.io

支持一下
赞赏是一门艺术