04_尚硅谷Android项目之_硅谷社交_第1页
04_尚硅谷Android项目之_硅谷社交_第2页
04_尚硅谷Android项目之_硅谷社交_第3页
04_尚硅谷Android项目之_硅谷社交_第4页
04_尚硅谷Android项目之_硅谷社交_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

尚硅谷Android项目之_硅谷社交 硅谷社交(作者:大海哥)谷粉第47群:285047793官网:1项目功能描述:1. 功能一:环信的集成及欢迎页面2. 功能二:登录页面3. 功能三:主页面4. 功能四:设置页面5. 功能五:联系人列表页面6. 功能六:添加好友7. 功能七:邀请页面8. 功能八:会话页面9. 功能九:主页面中的会话页面10. 功能十:群列表页面11. 功能十一:新建群页面12. 功能十二:群联系人选择页面13. 功能十三:群详情2环信SDK主要类2.1 EMClient 环信程序入口SDK 入口类EMClient.getInstance().init(context,options);注册EMClient.getInstance().createAccount(name,pwd);登录EMClient.getInstance().login(name,pwd);2.2 EMChatManager 聊天管理类主要功能: 消息收发,会话管理EMChatManager chatMgr = EMClient.getInstance().chatManager();sendMessagegetConversation2.3 EMContactManager 聊天好友管理类主要功能: 加减好友,黑名单管理EMContactManager contactMgr = EMClient.getInstance().contactManager();getContactsFromServergetContacts2.4 EMGroupManager 群组管理类主要功能:加减群,创建群,私有群,公开群管理EMGroupManager groupMgr = EMClient.getInstance().groupManager();2.5 EMChatroomManager聊天室管理类主要功能:加入,离开聊天室EMChatroomManager chatroomMgr = EMClient.getInstance().groupManager();2.6 EMCallManager实时音视频管理类主要功能:拨打,接收,IP 电话EMCallManager callMgr = EMClient.getInstance().callManager();2.7 实体类1)EMMessage EMMessageBodyEMTextMessageBodyEMImageMessageBodyEMVoiceMessageBodyEMVideoMessageBody2)EMConversation StringconversationId ()3)EMContact StringgetUsername ()4)EMGroup StringgetGroupId () StringgetGroupName ()3应用功能详解3.1功能一: 环信的集成及欢迎页面1) 环信的SDK介绍(1) 登录环信官方网站/(2) 点击注册-注册即时通讯云(3) 创建应用(4)下载SDK2) 环信的Demo演示导入环信demo的注意事项(1)根据自己android studio 版本修改gradle配置 和版本号(demo中默认是2.1.0的gradle)将C:UsersAdministratorDesktopeasemob-sdk-3.1.3_R2easemob-sdk-3.1.3examplesChatDemoUI3.0gradlewrapper下的distributionUrl=/distributions/gradle-2.10-all.zip修改为distributionUrl=/distributions/gradle-2.8-all.zip(2)修改项目中gradle的版本(demo中默认是2.1.0的gradle)将C:UsersAdministratorDesktopeasemob-sdk-3.1.3_R2easemob-sdk-3.1.3examplesChatDemoUI3.0下的classpath com.android.tools.build:gradle:2.1.0修改为classpath com.android.tools.build:gradle:1.5.0(3)将项目中的setting.gradle中如下内容注释掉/release时需要把下面的include相关的两行注释掉include :hyphenatechatsdkproject(:hyphenatechatsdk).projectDir = new File(./emclient-android/hyphenatechatsdk)(4)将easeui中的build.gradle如下内容注释掉compile project(:hyphenatechatsdk)3) 应用结构的分析在创建一个新的应用时, 就需要对整个应用的包结构进行一个设计, 对应用包的组织大致有两种方法l 方式一: 按模块来组织代码的包结构, 较大型的应用比较合适办公软件 开会模块 com.atguigu.meeting 发工资模块 com.atguigu.money 出差模块 l 方式二: 按类型来组织代码的包结构, 中小型应用比较合适硅谷社交: (mvc结构设计)model 模型 v view c controller模型层:主要处理数据,存储5大数据控制层:处理业务逻辑,显示层:显示数据控制层 com.atguigu.imapp.controller应用界面相关 com.atguigu.imapp.controller.activity存放fragment com.atguigu.imapp.controller.fragment显示列表的适配器 com.atguigu.imapp.controller.adapter 数据模型层 com.atguigu.imapp.model数据对象封装 com.atguigu.imapp.model.bean数据库操作类 com.atguigu.imapp.model.dao 数据库 com.atguigu.imapp.model.db相关工具类 com.atguigu.imapp.utils 自定义view com.atguigu.imapp.view4) 程序框架5) 集成EaseUI(1)将EaseUI模块导入到项目中,并关联到主项目中(2)配置AndroidManifest.xml清单文件/ 配置权限 将android:value=atguigudemo#demo替换为自己创建应用的值,例如:atguigu001#atguigu004(3)创建IMApplication,初始化EaseUIpublic class IMApplication extends Application private static Context mContext; Override public void onCreate() super.onCreate(); EMOptions options = new EMOptions(); options.setAutoAcceptGroupInvitation(false);/ 不自动接受群邀请信息 options.setAcceptInvitationAlways(false);/ 不总是一直接受所有邀请 / 初始化EaseUI EaseUI.getInstance().init(this,options); / 初始化模型层数据 Modle.getInstance().init(this); mContext = this; / 获取全局上下文 public static Context getApplication() return mContext; / 在AndroidManifest.xml中关联(4)错误解决编译程序报如下错误Error:Execution failed for task :app:transformClassesWithDexForDebug. com.android.build.api.transform.TransformException: cess.ProcessException: ernal.ExecException: Process command D:Program FilesJavajdk1.7.0_45binjava.exe finished with non-zero exit value 2错误原因:EaseUI中的v4包和主项目中的v7包冲突,解决办法:在项目的build.gradle将v7包中的v4包移除dependencies compile fileTree(dir: libs, include: *.jar) testCompile junit:junit:4.12 compile (com.android.support:appcompat-v7:23.4.0) exclude module: support-v4 compile project(:easeui)6) 欢迎页面(1) 图片(2) 布局文件 7) 欢迎页面流程图8) 延迟2s跳转发送延时消息handler.sendMessageDelayed(Message.obtain(), 2000);Overrideprotected void onDestroy() super.onDestroy(); handler.removeCallbacksAndMessages(null);9) 登录处理(1) 已经登录过主逻辑处理private void toMainOrLogin() Model.getInstace().getGolbalThreadPool().execute(new Runnable() Override public void run() / 登录过 if (EMClient.getInstance().isLoggedInBefore() / 获取用户信息 UserInfo account = Model.getInstace().getUserAccountDao().getAccountByHxId(EMClient.getInstance().getCurrentUser(); / 做其它事情 Model.getInstace().loginSuccess(account); / 主页面 Intent intent = new Intent(SplashActivity.this, MainActivity.class); startActivity(intent); else / 未登录过 / 登录页面 Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); );10) 创建全局线程池private ExecutorService executorService = Executors.newCachedThreadPool();public ExecutorService getGlobalThreadPool() return executorService;11) 用户bean对象public class UserInfo private String name; / 用户名称 private String hxId; / 环信id private String nick; / 昵称 private String photo; / 头像 public UserInfo() public UserInfo(String name) = name; this.hxId = name; this.nick = name; public String getName() return name; public void setName(String name) = name; public String getHxId() return hxId; public void setHxId(String hxId) this.hxId = hxId; public String getNick() return nick; public void setNick(String nick) this.nick = nick; public String getPhoto() return photo; public void setPhoto(String photo) this.photo = photo; Override public String toString() return UserInfo + name= + name + + , hxId= + hxId + + , nick= + nick + + , photo= + photo + + ; 12) 创建用户账号信息数据库(1) 数据库建表语句/ 用户账号表public class UserAccountTable public static final String TAB_NAME = tab_account; public static final String COL_NAME = name; public static final String COL_HXID = hxid; public static final String COL_NICK = nick; public static final String COL_PHOTO = photo; public static final String CREATE_TAB = create table + TAB_NAME + ( + COL_HXID + text primary key, + COL_NAME + text, + COL_NICK + text, + COL_PHOTO + text); (2) 用户账号表操作类/ 添加用户到数据库public void addAccount(UserInfo user) / 获取数据库链接 SQLiteDatabase db = mHelper.getWritableDatabase(); / 操作数据库 ContentValues values = new ContentValues(); values.put(UserAccountTable.COL_HXID, user.getHxId(); values.put(UserAccountTable.COL_NAME, user.getName(); values.put(UserAccountTable.COL_NICK, user.getNick(); values.put(UserAccountTable.COL_PHOTO, user.getPhoto(); db.replace(UserAccountTable.TAB_NAME, null, values);/ 获取用户public UserInfo getAccount(String name) / 获取数据库链接 SQLiteDatabase db = mHelper.getReadableDatabase(); / 操作数据库 String sql = select * from + UserAccountTable.TAB_NAME + where + UserAccountTable.COL_NAME + =?; Cursor cursor = db.rawQuery(sql, new Stringname); UserInfo account = null; if (cursor.moveToNext() account = new UserInfo(); account.setName(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_NAME); account.setHxId(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_HXID); account.setNick(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_NICK); account.setPhoto(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_PHOTO); / 关闭资源 cursor.close(); / 返回数据 return account;/ 根据环信id获取所有用户信息public UserInfo getAccountByHxId(String hxId) / 获取数据库链接 SQLiteDatabase db = mHelper.getReadableDatabase(); / 操作数据库 String sql = select * from + UserAccountTable.TAB_NAME + where + UserAccountTable.COL_HXID + =?; Cursor cursor = db.rawQuery(sql, new StringhxId); UserInfo account = null; if (cursor.moveToNext() account = new UserInfo(); account.setName(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_NAME); account.setHxId(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_HXID); account.setNick(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_NICK); account.setPhoto(cursor.getString(cursor.getColumnIndex(UserAccountTable.COL_PHOTO); / 关闭资源 cursor.close(); / 返回数据 return account;(3) 创建用户账号的数据库/ 用户账号数据库public class UserAccountDB extends SQLiteOpenHelper private static final int DB_VERSION = 2; public UserAccountDB(Context context) super(context, account.db, null, DB_VERSION); Override public void onCreate(SQLiteDatabase db) db.execSQL(UserAccountTable.CREATE_TAB); Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 13) 全局数据处理类获取实例对象/ 获取实例对象static public Model getInstance() return mInstance;初始化/ 初始化public void init(Context context) mContext = context; mUserAccountDao = new UserAccountDao(mContext); EventListener eventListener = new EventListener(mContext);获取管理者对象/ 获取账号管理者对象public UserAccountDao getUserAccountDao() return mUserAccountDao;/ 获取数据管理者对象public DBManager getDBManager() return mDBManager;登录成功后处理public void loginSuccess(UserInfo account) if (account = null) return; if (dbManager != null) dbManager.close(); / 创建数据库的管理类 dbManager = new DBManager(mContext, account.getName(); Log.e(TAG, 登录成功);3.2功能二: 登录页面1) 图片2) 页面布局 / 3) 登录页面流程图4) 注册private void regist() /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论