RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1096704
Accepted
Andrew
Andrew
Asked:2020-03-19 18:10:04 +0000 UTC2020-03-19 18:10:04 +0000 UTC 2020-03-19 18:10:04 +0000 UTC

聊天写安卓

  • 772

有一个任务 - 在android上写一个聊天。还有一个聊天服务器。据我了解,一切都需要在套接字上完成。但是我不知道从哪里开始 :( 首先,很难找到一个可以正常工作的库或一种可以提供预期结果的方法。我希望可以通过scarletfrom 完成所有工作,Tinder但是出了点问题,并且依赖关系没有充分连接。将所需的java版本设置为.后出现很多问题。build.gradle有很多库,甚至更多的手工方法,但由于服务器地址使用协议而大部分都消失了http/https,我使用wss.目前,我的最后一次尝试是从这里进行的,请求也没有发送:

val wsFactory = WebSocketFactory()
                .createSocket("wss://server/")
                .addHeader("token", context!!.getSharedPreferences("app_data", 0).getString("access_token", "")!!)

或者我无法理解创建聊天的原则。我以前做过改造,也许我期待正常的请求响应行为。但从我读到的内容来看,这里的一切都以大致相同的方式实现。也有这样的尝试:

private fun instantiateWebSocket() {
        val client = OkHttpClient()
        val request: Request = Request.Builder()
                .url("wss://server/")
                .addHeader("token", context!!.getSharedPreferences("app_data", 0).getString("access_token", "")!!)
                .build()


        Timber.i(request.toString())

        val socketListener = SocketListener(context!!)
        webSocket = client.newWebSocket(request, socketListener)
        webSocket!!.send("0909")

    }

    class SocketListener(cont: Context) : WebSocketListener() {
        var context: Context = cont
        override fun onOpen(webSocket: WebSocket, response: Response) {
            Timber.i(response.toString())
            Runnable { Toast.makeText(context, "Connection Established!", Toast.LENGTH_LONG).show() }
        }

        override fun onMessage(webSocket: WebSocket, text: String) {
            val jsonObject = JSONObject()
            try {
                jsonObject.put("message", text)
                jsonObject.put("byServer", true)
            } catch (e: JSONException) {
                e.printStackTrace()
            }

        }

        init {
            this.context = cont
        }
    }

在这里也没有发送请求。我究竟做错了什么?也许有人有创建聊天的经验并有工作方式?

android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew
    2020-03-31T14:57:45Z2020-03-31T14:57:45Z

    我正在为像我这样的人写这个答案 - 那些对套接字和如何编写聊天一无所知的人。我花了一点时间研究,最后我设法实现了我需要的东西。我使用 OkHttp 来创建聊天。首先,让我们创建一个客户端:

     val client = OkHttpClient.Builder()
                    .addInterceptor(loggingInterceptor)
                    .build()
    

    接下来,我们创建一个请求:

    val request = Request.Builder()
                    .url(Constants.TEST_CHAT_URL)
                    .build()
    

    最后创建套接字:

    webSocket = client.newWebSocket(request, object : WebSocketListener() {
                override fun onClosed(webSocket: WebSocket, code: Int, reason: String) {
                    super.onClosed(webSocket, code, reason)
                    Timber.i("closing data: $code -> $reason")
                }
    
                override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
                    super.onClosing(webSocket, code, reason)
                    webSocket.close(1000, null)
                    Timber.i("Closing : $code / $reason")
                }
    
                override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
                    super.onFailure(webSocket, t, response)
                    Timber.i("Error: %s", t.localizedMessage)
                }
    
                override fun onMessage(webSocket: WebSocket, text: String) {
                    super.onMessage(webSocket, text)
                    Timber.i("Receiving : $text")
    
                }
    
                override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
                    super.onMessage(webSocket, bytes)
                    Timber.i("Receiving bytes : %s", bytes.hex())
                }
    
                override fun onOpen(webSocket: WebSocket, response: Response) {
                    super.onOpen(webSocket, response)
                    Timber.i("on open")
                }
            })
    

    与人交谈后,需要关闭连接:

    webSocket.close(1000, null)
    

    要发送消息,您需要使用以下功能send:

    webSocket.send("some_string")
    

    仅此而已:) 事实证明它并不像起初看起来那么困难。也许有人会有意见/建议 - 我会很高兴地听。

    • 2

相关问题

  • 来自片段的列表落后于 BottomNavigationView

  • 无法将变量从 Activity 传递到 Fragment

  • 构建与完成的片段略有不同的片段的最佳方法是什么?

  • 如何更改来自服务器的响应中的日期格式?

  • 谷歌地图在应用程序的发布版本中不起作用

  • 材料设计按钮。单击按钮上的可选区域!

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5