之前博客都删啦 im是现在比较火的技术 无聊写个极光简单demo 下面直接看代码

Application.java
onCreate方法加入以下代码:
JMessageClient.init(getApplicationContext(), true);
MainActivity.java
public class MainActivity extends AppCompatActivity {
private MainActivity mContext;
private UserInfo userInfo;
/**
* 创建聊天室
/
private Conversation mConv;
/
*
* 获取好友列表
*/
private List userInfoList;

private RecyclerView rv_list;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = this;login();

/**

  • 获取某个用户信息
    */
    // JMessageClient.getUserInfo(“用户名”, new GetUserInfoCallback() {
    // @Override
    // public void gotResult(int code, String message, UserInfo userInfo) {
    // if (code == 0){
    // MainActivity.this.userInfo = userInfo;
    // Toast.makeText(mContext,“获取用户列表成功”,Toast.LENGTH_LONG).show();
    // }else {
    // Toast.makeText(mContext,“获取用户列表失败”,Toast.LENGTH_LONG).show();
    // }
    //
    // }
    // });

    }

    /**

    • 聊天界面
      */
      private void initRv() {

      rv_list = findViewById(R.id.rv_list);
      LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
      rv_list.setLayoutManager(linearLayoutManager);
      rv_list.addItemDecoration(new RecyclerView.ItemDecoration() {
      @Override
      public void getItemOffsets(@NonNull Rect outRect, int itemPosition, @NonNull RecyclerView parent) {
      super.getItemOffsets(outRect, itemPosition, parent);
      outRect.top = 10;
      }
      });
      MessageAdapter messageAdapter = new MessageAdapter(mContext,mMsgList);
      rv_list.setAdapter(messageAdapter);
      // messageAdapter.notifyDataSetChanged();

    }

    private void init(){

     /*** 单聊发送短信*/Message message = JMessageClient.createSingleTextMessage(userInfo.getUserName(), userInfo.getAppKey(), "这是一条短信");message.setOnSendCompleteCallback(new BasicCallback() {@Overridepublic void gotResult(int code, String message) {if (code == 0){Toast.makeText(mContext,"发送短信成功",Toast.LENGTH_LONG).show();}else {Toast.makeText(mContext,"发送短信失败",Toast.LENGTH_LONG).show();}}});
    

    }

    @Override
    protected void onDestroy() {
    super.onDestroy();
    /**
    * 退出极光im登录
    */
    JMessageClient.logout();
    }

    /**

    • 登录im
    • @param view
      */
      public void toLogin(View view) {
      login();

    }

    /**

    • 登录极光im
      /
      private void login(){
      /
      *

      • im登录
        */
        JMessageClient.login(“用户名”, “密码”, new BasicCallback() {
        @Override
        public void gotResult(int code, String message) {
        if (code == 0){
        Toast.makeText(mContext,“登录状态:登录成功”,Toast.LENGTH_LONG).show();
        //获取当前用户信息
        userInfo = JMessageClient.getMyInfo();
        //创建聊天室
        createRoom();
        }else {
        Toast.makeText(mContext,“登录状态:登录失败”,Toast.LENGTH_LONG).show();
        }

        }
        });
        }

    /**

    • 获取好友列表
    • @param view
      */
      public void toGetUserList(View view) {
      ContactManager.getFriendList(new GetUserInfoListCallback() {
      @Override
      public void gotResult(int responseCode, String responseMessage, List userInfoList) {
      if (0 == responseCode) {
      //获取好友列表成功
      MainActivity.this.userInfoList = userInfoList;
      //获取好友列表失败
      Toast.makeText(mContext,“获取好友列表成功”,Toast.LENGTH_LONG).show();
      } else {
      //获取好友列表失败
      Toast.makeText(mContext,“获取好友列表失败”,Toast.LENGTH_LONG).show();
      }
      }
      });

    }

    /**
    *添加

    • @param userName 用户名
    • @param appKey appkey
    • @param message 申请理由
      */
      private void sendUser(String userName,String appKey,String message){
      ContactManager.sendInvitationRequest(userName, appKey, message, new BasicCallback() {
      @Override
      public void gotResult(int responseCode, String responseMessage) {
      if (0 == responseCode) {
      //好友请求请求发送成功
      Toast.makeText(mContext,“发送添加好友成功”,Toast.LENGTH_LONG).show();
      } else {
      //好友请求发送失败
      Toast.makeText(mContext,“发送添加好友失败”,Toast.LENGTH_LONG).show();
      }
      }
      });
      }

    public void toSendUser(View view) {
    sendUser(userInfo.getUserName(),userInfo.getAppKey(),“活着2020”);
    }

    /**

    • 通过搜索用户名获取用户信息 然后进行添加好友
      */
      private void getUserInfo(String userName){
      JMessageClient.getUserInfo(userName, new GetUserInfoCallback() {
      @Override
      public void gotResult(int code, String message, UserInfo userInfo) {
      if (code == 0){
      UserInfo userData = userInfo;
      Toast.makeText(mContext,“搜索好友成功”,Toast.LENGTH_LONG).show();
      }else {
      Toast.makeText(mContext,“搜索好友失败”,Toast.LENGTH_LONG).show();
      }

       }
      

      });
      }

    public void toSearchUser(View view) {
    getUserInfo(“用户名”);
    }

    private int mOffset = 18;
    private List mMsgList = new ArrayList();//所有消息列表
    /**

    • 获取好友发送的信息
      */
      public void GetMessage(){
      mMsgList = mConv.getMessagesFromNewest(0, mOffset);
      switch (mMsgList.get(0).getContentType()) {
      case text:
      if (mMsgList != null){
      initRv();
      }
      String text = ((TextContent) mMsgList.get(0).getContent()).getText();
      //当前接收的是文本
      Toast.makeText(mContext,“接收的第一条短信是” + text,Toast.LENGTH_LONG).show();
      Log.e(“好友发送的信息”,mMsgList + “”);
      break;
      }

    }

    public void GetSendMessage(View view) {
    GetMessage();
    }

    /**

    • 创建单聊室
    • @param view
      */
      public void toCreateRoom(View view) {
      createRoom();
      }

    /**

    • 创建单聊
      /
      private void createRoom(){
      /
      *

      • 获取单个单聊会话
        */
        mConv = JMessageClient.getSingleConversation(“好友用户名”, “appkey”);

      /**

      • 没有获取会话 就创建一个会话
      • 创建单聊会话
        /
        if (mConv == null){
        mConv = Conversation.createSingleConversation(“好友用户名”,“appkey”);
        }
        /
        *
      • 判断当前是否为单聊
        */
        if (mConv.getType() == ConversationType.single){
        Toast.makeText(mContext,“当前是单聊”,Toast.LENGTH_LONG).show();
        }
        GetMessage();
        }
        }

MessageAdapter.java

/**

  • @author Liu

  • @Description 聊天消息

  • @creat time 2021/2/7 16:12
    */
    public class MessageAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List mMsgList;

    /**

    • 左边聊天框
      /
      private final static int LEFT_VIEW_TYPE = 1;
      /
      *
    • 右边聊天框
      */
      private final static int RIGHT_VIEW_TYPE = 2;

    private Context mContext;

    public MessageAdapter (Context context,List msgList){
    this.mContext = context;
    this.mMsgList = msgList;

    }

    public List getmMsgList() {
    return mMsgList == null ? new ArrayList<>() : mMsgList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    /**
    * 接受短信方
    /
    if (viewType == LEFT_VIEW_TYPE){
    View view = LayoutInflater.from(parent.getContext())
    .inflate(R.layout.item_left,parent,false);
    LeftViewHolder holder = new LeftViewHolder(view);//view表示子项
    return holder;
    }
    /
    *
    * 发送短信方
    */
    else {
    View view = LayoutInflater.from(parent.getContext())
    .inflate(R.layout.item_right,parent,false);
    RightViewHolder holder = new RightViewHolder(view);//view表示子项
    return holder;
    }

    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof LeftViewHolder){
    ((LeftViewHolder) holder).tv_left_txt.setText(((TextContent) mMsgList.get(position)
    .getContent()).getText());

     }else if (holder instanceof RightViewHolder){((RightViewHolder) holder).tv_right_txt.setText(((TextContent) mMsgList.get(position).getContent()).getText());}
    

    }

    @Override
    public int getItemViewType(int position) {
    /**
    *
    * 判断显示左边聊天框还是右边聊天框
    */
    return mMsgList.get(position).getDirect() == MessageDirect.receive
    ? LEFT_VIEW_TYPE:RIGHT_VIEW_TYPE;
    }

    @Override
    public int getItemCount() {
    return mMsgList.size();
    }

    public class LeftViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_left_txt;

     public LeftViewHolder(@NonNull View itemView) {super(itemView);tv_left_txt = itemView.findViewById(R.id.tv_left_txt);}
    

    }
    public class RightViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_right_txt;

     public RightViewHolder(@NonNull View itemView) {super(itemView);tv_right_txt = itemView.findViewById(R.id.tv_right_txt);}
    

    }
    }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<Buttonandroid:onClick="toLogin"android:text="登录"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toGetUserList"android:text="获取好友列表"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toSendUser"android:text="发送添加好友"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toSearchUser"android:text="搜索好友"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" />
<Buttonandroid:onClick="GetSendMessage"android:text="获取好友发送信息"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><Buttonandroid:onClick="toCreateRoom"android:text="创建聊天室"android:layout_width="wrap_content"android:layout_height="wrap_content"tools:ignore="OnClick" /><androidx.recyclerview.widget.RecyclerViewandroid:paddingTop="20dp"android:paddingLeft="10dp"android:paddingRight="10dp"android:paddingBottom="10dp"android:id="@+id/rv_list"android:scrollbars="none"android:overScrollMode="never"android:layout_width="match_parent"android:layout_height="wrap_content"/>

item_left.xml <?xml version="1.0" encoding="utf-8"?>

<TextViewandroid:id="@+id/tv_left_txt"android:paddingLeft="5dp"android:layout_gravity="center"android:text="这是一条短信"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

item_right.xml

<?xml version="1.0" encoding="utf-8"?>

<TextViewandroid:id="@+id/tv_right_txt"android:paddingLeft="5dp"android:layout_gravity="center"android:text="这是一条短信"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
<ImageViewandroid:src="@mipmap/ic_launcher"android:layout_width="32dp"android:layout_height="32dp"android:layout_marginLeft="5dp" />

点击下载demo链接

极光IM简单代码(代码比较清晰)相关推荐

  1. php删除上传图片,PHP上传图片、删除图片的简单示例代码

    本节内容: PHP上传图片.删除图片 1,php上传图片: 复制代码 代码示例: if (!empty($_FILES["img"]["name"])) { / ...

  2. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  3. vba 编辑combobox内容_初识Visual Basic编辑器并建立一段简单的代码

    大家好,从今日开始我正式推出"VBA之EXCEL应用"教程,这个教程是面向初学人员的教程,教程一共三册,十七个章节,从简单的录制宏实现一直讲到窗体的搭建,都是我们在利用EXCEL工 ...

  4. Unity 简单示例代码和向导/Unity Aplication Block

    Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...

  5. 用VB6写的一个简单俄罗斯方块代码

    网络上有很多俄罗斯方块代码.它们大都为了视觉效果,程序比较复杂,不利于学习游戏编程.所以我写了个简单俄罗斯方块代码,尽量用VB本身的功能,没有复杂的DirectX. 下载(注意修改下载后的扩展名) m ...

  6. 原生js写三级联动 java_原生js三级联动的简单实现代码

    本文实例为大家分享了js查询天气应用,供大家参考,具体内容如下 实现功能:打开网页时显示用户所在城市的天气状况,在输入框输入城市可查询其它城市. 实现过程:先调用百度地图的API来获取用户所在的城市, ...

  7. python的代码有哪些_简单python代码类型有哪些?

    简单python代码类型有哪些? 简单python代码类型有: 1.[背景] 最近,派大星想要减肥,他决定控制自己的饮食,少吃一点蟹黄堡. 海绵宝宝为了帮助好朋友派大星,和派大星一起制定了一个饮食游戏 ...

  8. ul、li列表简单实用代码实例

    利用ul和li可以实现列表效果,下面就是一个简单的演示. 代码如下: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  9. webpack和react_使用React和Webpack进行简单的代码拆分

    webpack和react by Didier FRANC 由Didier FRANC 使用React和Webpack进行简单的代码拆分 (Straightforward code splitting ...

  10. html js控制页面蒙版,JavaScript蒙板(model)功能的简单实现代码

    思路: •创建一个蒙板, 设置蒙板的堆叠顺序保证能将其它元素盖住 position: absolute; top: 0; left: 0; display: none; background-colo ...

最新文章

  1. 蓝牙写入数据库_蓝牙 数据写入 简单易懂版(适合没写过蓝牙的看)
  2. 洛奇6里很喜欢的一段话!洛奇6经典台词!而是你能挨多重,并且坚持向前,你能承受多少并且坚持向前,这样才叫胜利!
  3. HTML5中aside标签的两种使用方法
  4. spss数据分析可以被人工智能替换吗
  5. 优秀网页设计:带给你灵感的联系页面设计
  6. PHP操作MongoDB GridFS 存储文件
  7. git for windows_手把手教会舍友玩 Git (包教包会,再也不用担心他的学习)
  8. 第一次学游泳技巧_游泳前,让自己不再怕水的5堂准备课
  9. ZooKeeper 3.5.5 基础使用
  10. HashMap 精讲原理篇
  11. hashmap containsvalue时间复杂度_恕我直言,你真的了解HashMap吗?
  12. javaweb项目tomcat检查不到当前模型的解决方法
  13. uva10098--排列
  14. 大雪坪剑来 Spring Cloud 教程(二):Spring Boot 集成 mybatis 实现增删改查
  15. (八)高德地图之添加marker标记点
  16. 主引导记录、启动扇区
  17. 使用mongoDB的一些新的(mongoDB报错解决)
  18. 多序列比对要多久时间_多序列比对算法探讨
  19. 定制自己的火狐搜索插件 searchplugins
  20. 自定义接口机板KU085-8ADC-3G

热门文章

  1. java能开发winform程序吗_Java进击C#——应用开发之WinForm环境
  2. 计算机论文指导记录卡,毕业论文指导记录表范文.doc
  3. 自制工具:CSV代码生成器:自动生成CSV文件对应的C++实体类和字段类型解析代码
  4. 基于Java毕业设计优课网设计与实现源码+系统+mysql+lw文档+部署软件
  5. 2020大一下暑期实习--funcode游戏设计
  6. 海思Hi3798处理器参数,Hi3798芯片详细信息介绍
  7. verilog 用逻辑门实现四选一数据选择器
  8. python实现简易动态贝叶斯网络的推断
  9. linux f95编译器,Fortran 95编译器是否可以编译Fortran 77代码?
  10. java刷票小程序,小程序投票系统刷票