uniapp聊天記錄本地存儲(詳細易懂)

??????

目錄

目錄

1、通過websocket拿取數據

2、獲取聊天數據

3、聊天信息存儲 、更新

4、讀取聊天記錄

5、發送信息,信息獲取

6、最終效果

1.聊天信息的存儲格式

?2、樣式效果


??????? ?寫聊天項目,使用到了本地存儲。需要把聊天信息保存在本地,實時獲取。

????????這個項目中,使用了websocket進行數據的交互,websocket部分就不寫了,如果有需要可以看我關于websocket的博客

1、通過websocket拿取數據

????????下面我有用到websocket的一些方向,但是沒有寫方法內容,這用了方法名。寶子們,可以看我直接寫的文章,結合理解。

在vue項目中webSocket封裝(傳token)_vue3 websocketbean 設置header token-CSDN博客

????????不需要傳token的可以不傳token,自己稍作更改,即可?。

2、獲取聊天數據

	import {sendWebsocket,websocketSend,initWebSocket} from "../../utils/apis/ws.js";onMounted(async () => {//進入頁面建立鏈接initWebSocket()const val = ref({id: userstore.userData.id,username: userstore.userData.username})//通過websocket發送信息sendWebsocket(wsMessage, wsError);websocketSend(val.value)//命名文件,進行讀取聊天信息(在聊天信息中找到,自己和對應id朋友的聊天記錄)filename.value = `chat_${sendData.value.to}_${sendData.value.from}`;//接口數據,讀取本地存儲的數據chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];})// 監聽服務器傳來的變化const wsMessage = (data) => {console.log(data, "監聽服務器傳來的變化");//得到websockt返回的數據wsstore.WsChat = data;if (data.from && data.to) {//如果發送人的id和接收人的id都存在,那么進入聊天記錄存儲方法,進行聊天存儲和更新saveChatRecord(data.from, data.to, data)}//讀取聊天信息,//const res = readChatRecords(data.from, userstore.userData.id)};

3、聊天信息存儲 、更新

????????對于一個名為A的用戶和一個名為B的用戶的聊天記錄,可以將它們存儲在一個名為chat_A_B.json的文件中。

    // 存儲聊天記錄function saveChatRecord(userId, toUserId, message) {// 找到本地存儲最外面的對象 , userstore.userData.id 登錄人的 id.const fileName = `chat_${userstore.userData.id}.json`;//創建里面的對象,自身id和接收信息的人id.用于區別和不同朋友的聊天記錄const chat = `chat_${userId}_${toUserId}`;try {//獲取本地的聊天信息,如果沒有生成{"chatHistory": {}}const chatContent = uni.getStorageSync(fileName) || '{"chatHistory": {}}';//將獲取的數據const chatRecords = JSON.parse(chatContent);//在獲取數據中查找是否有自己和好友的聊天信息存儲if (!chatRecords.chatHistory.hasOwnProperty(chat)) {//如果沒有創建一個新的空數組chatRecords.chatHistory[chat] = [];}// 將新消息追加到聊天記錄數組中chatRecords.chatHistory[chat].push(message);//本地存儲uni.setStorageSync(fileName, JSON.stringify(chatRecords));} catch (e) {console.error(e);}}}

4、讀取聊天記錄

????????在用戶打開聊天窗口時,我們應獲取相應的聊天記錄

	// 讀取聊天記錄function readChatRecords(userId, toUserId) {//找到登錄人的存儲文件const fileName = `chat_${userId}.json`;try {//獲取信息,如果不存在,返回{"chatHistory": {}}const chatContent = uni.getStorageSync(fileName) || '{"chatHistory": {}}';return JSON.parse(chatContent).chatHistory;} catch (e) {console.error(e);return [];}}

5、發送信息,信息獲取

//登錄人發送信息,更新本地存儲
const Send = async () => {//獲取信息發送時間sendData.value.time = getNowTime()//想接口發送數據websocketSend(sendData.value)//將發送的聊天信息保存在本地saveChatRecord(sendData.value.to, sendData.value.from, sendData.value);//獲取本地存儲的數據進行頁面更新chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];console.log(chatLog.value, "發送完信息,獲取數據");// 將輸入框清空sendData.value.content = ""}//在登錄人發送信息后本地存儲數據更新,監測到更新后,讀取存儲數據,進行頁面更新
watch(() => ws.WsChat, (newValue, oldValue) => {console.log(`count發生了變化,老值為${oldValue},新值為${newValue}`);//監測本地存儲中是否有數據更新,即是否收到新的消息chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];}, {immediate: true})

6、最終效果

1.聊天信息的存儲格式

? ? ? ? id為9的賬號都存儲在chat_9.json文件中,chat_7_9是id為9的賬號和朋友id為7的賬號的聊天記錄。chat_8_9是id為9的賬號和朋友id為8的賬號的聊天記錄。

?2、樣式效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717959.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPT對話知識庫——ARM-Cortex架構分為哪幾個系列?每個系列有幾種工作模式?各種工作模式之間的定義和區別?每種架構不同的特點和應用需求?

提問模型:GPT-4-TURBO-PREVIEW 提問時間:2024.03.02 1,問: Cortex-M系列有幾種工作模式 1,答: Cortex-M系列微控制器是ARM公司開發的一類低功耗、高性能的32位微處理器,廣泛應用于嵌入式系統中…

Centos7使用man查找命令時,報錯No manual entry for xxxx

Centos7使用man查找命令時,報錯No manual entry for xxxx 在Linux中使用man指令查找指令信息時,報No manual entry for xxxx。 比如使用man指令查找sleep3號手冊時,出現以下錯誤: 這是由于沒有安裝man-pages這個rpm包導致的&#…

掌握基本排序算法:冒泡、選擇、插入和快速排序

在計算機科學的世界里,排序是一項基本而重要的操作。無論是數據庫管理、搜索引擎,還是日常編程,高效的排序算法都是提高性能的關鍵。本文將介紹四種基本的排序算法:冒泡排序、選擇排序、插入排序和快速排序,并探討它們…

從0開始學習NEON(1)

1、前言 在上個博客中對NEON有了基礎的了解,本文將針對一個圖像下采樣的例子對NEON進行學習。 學習鏈接:CPU優化技術 - NEON 開發進階 上文鏈接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一個例子 現在有一張圖片,需…

獲取 Windows 通知中心彈窗通知內容(含工具漢化)

目錄 前言 技術原理概述 測試代碼和程序下載連接 本文出處鏈接:https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 從 Windows 8.1 開始,Windows 通知現在以 Toast 而非 Balloon 形式顯示( Bollon 通知其實現在是應用…

在ubuntu上安裝hadoop完分布式

準備工作 Xshell安裝包 Xftp7安裝包 虛擬機安裝包 Ubuntu鏡像源文件 Hadoop包 Java包 一、安裝虛擬機 創建ubuntu系統 完成之后會彈出一個新的窗口 跑完之后會重啟一下 按住首先用ctrlaltf3進入命令界面,輸入root,密碼登錄管理員賬號 按Esc 然后輸入 …

數據結構常用的字符串函數(中英雙釋)

頭文件:string.h 1.strchr const char * strchr ( const char * str, int character ); Locate first occurrence of character in string str C string. character Character to be located. Return Value A pointer to the first occurrence of character in s…

適用于恢復iOS數據的 10 款免費 iPhone 恢復軟件

現在,您可以獲得的 iPhone 的存儲容量比大多數人的筆記本電腦和臺式電腦的存儲容量還要大。雖然能夠存儲數千張高分辨率照片和視頻文件、安裝數百個應用程序并隨身攜帶大量音樂庫以供離線收聽固然很棒,但在一個地方擁有如此多的數據可能會帶來毀滅性的后…

2.2_5 調度算法

文章目錄 2.2_5 調度算法一、適用于早期的批處理系統(一)先來先服務(FCFS,First Come First Serve)(二)短作業優先(SJF,Shortest Job First)(三&a…

SpringMVC總結

SpringMVC SpringMVC是隸屬于Spring框架的一部分,主要是用來進行Web開發,是對Servlet進行了封裝。 對于SpringMVC我們主要學習如下內容: SpringMVC簡介 請求與響應 REST風格 SSM整合(注解版) 攔截器 SpringMVC是處理Web層/表現層的框架&#xff…

易語言源代碼5000例

僅供學習研究交流使用 加群下載

探索MyBatis-Plus的高階用法

引言 MyBatis-Plus 是 MyBatis 的增強工具包,提供了許多方便快捷的功能來簡化開發,提高效率。除了基本的 CRUD 操作外,MyBatis-Plus 還提供了一些高級功能,本文將探討 MyBatis-Plus 的高階用法,幫助開發者更好地利用該…

Linux服務器搭建超簡易跳板機連接阿里云服務器

簡介 想要規范內部連接阿里云云服務器的方式,但是最近懶病犯了,先搞一個簡易式的跳板機過渡一下,順便在出一個教程,其他以后再說! 配置方法 創建密鑰 登錄阿里云,找到云服務器ECS控制臺,點擊…

【小白友好】LeetCode 打家劫舍 III

https://leetcode.cn/problems/house-robber-iii/description/ 前言 建議還是先看看動態規劃的基礎題再看這個。動態規劃是不刷題,自己100%想不出來的。 基礎題: 23 小白想法 現在我們想遍歷的數據結構不是數組了,而是一顆樹。在樹上的d…

C++遞推

統計每個月兔子的總數 #include<bits/stdc.h> using namespace std; int n,sum0; void f(int); int main() {int a[1000];cin>>n;a[1]1;a[2]2;for(int i3;i<1000;i){a[i]a[i-1]a[i-2];}cout<<a[n];return 0; } void f(int n){}猴子吃桃子 #include<b…

2024年華為OD機試真題-電腦病毒感染-Python-OD統一考試(C卷)

題目描述: 一個局域網內有很多臺電腦,分別標注為0 - N-1的數字。相連接的電腦距離不一樣,所以感染時間不一樣,感染時間用t表示。 其中網絡內一個電腦被病毒感染,其感染網絡內所有的電腦需要最少需要多長時間。如果最后有電腦不會感染,則返回-1 給定一個數組times表示一個…

在Spring Boot中如何實現異常處理?

在Spring Boot中&#xff0c;異常處理可以通過幾種方式實現&#xff0c;以提高應用程序的健壯性和用戶體驗。這些方法包括使用ControllerAdvice注解、ExceptionHandler注解、實現ErrorController接口等。下面是一些實現Spring Boot異常處理的常用方法&#xff1a; 1. 使用Cont…

Git實戰(2)

git work flow ------------------------------------------------------- ---------------------------------------------------------------- 場景問題及處理 問題1&#xff1a;最近提交了 a,b,c,d記錄&#xff0c;想把b記錄刪掉其他提交記錄保留&#xff1a; git reset …

【C++ 編程指南】

C 編程指南 ■ C環境安裝■ C 基本語法■ 預定義宏■ # 和 ## 運算符■ C 引用■ C 命名空間■ 定義命名空間■ using 指令■ 嵌套的命名空間 ■ String類■ 類■ 類的static靜態成員 ■ C 繼承■ 繼承類型 public、protected 或 private■ 訪問控制和繼承■ 多繼承■ 數據抽象…

機器學習-面經

經歷了2023年的秋招&#xff0c;現在也已經入職半年了&#xff0c;空閑時間將面試中可能遇到的機器學習問題整理了一下&#xff0c;可能答案也會有錯誤的&#xff0c;希望大家能指出&#xff01;另外&#xff0c;不論是實習&#xff0c;還是校招&#xff0c;都祝福大家能夠拿到…