今年还没下雪,来北京好几年了,还是没去看过红砖白雪,也没去过长城。
流程就是这么个流程,不难
关键是代码块往哪里放,怎么放,这样写对效率有没有影响
第一遍请求未结束,又开始第二遍了,怎么处理?
你就说闹心不
dog太阳的!!!
注意控制请求频次和后端返回的参数个数;
特别时后端返回的数据,别一脑子把整个数据库打包返回
注意请求数据的时机,根据项目需求自己掂量吧
和别人没什么不同
唯一优点
url封装请求,Json数据赋值给对象,结构清晰,低耦合
前面两个为流程截取代码,第3个为json请求解析代码页
1、请求后端json集合
DataService.Instance.GetRobotStateInfoPos(robotEntity.Id, (robotState) =>
{
Debug.Log(“数据回调处理”);
//取集合中的某个元素
RobotStateInfo data = robotState.Find(a => a.Id_Robot.Equals(robotEntity.Id) );
});
public void GetRobotStateInfoPos(int id_Robot, GetFinish<RobotStateInfo> finishOp = null, GetNotFinish notFishshOp = null)
{
//拼接url地址,可凭url地址直接获取返回值
string url = 拼接url地址
GetDataControl<RobotStateInfo> dataControl = GetDataControl(finishOp, notFishshOp);
StartCoroutine(dataControl.GetData(url));
}
public IEnumerator GetData(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
yield return request.SendWebRequest();
GetResult(request);
}
//解析后端返回的json集合
private void GetResult(UnityWebRequest request)
{
if (request.isNetworkError || request.isHttpError)
{
notFishshOp?.Invoke();
}
else
{
BaseResult<List<T>> result = JsonConvert.DeserializeObject<BaseResult<List<T>>>
(request.downloadHandler.text);
if (result.Code.Equals(0))
finishOp?.Invoke(result.Content);
else
notFishshOp?.Invoke();
}
}
//json集合中单个字符串的接收
public class PlayerStateInfo
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public int Id_Robot { get; set; }
public string Pos_X { get; set; }
public string Pos_Y { get; set; }
}
2、请求后端单个json字符串
DataService.Instance.GetRobotOnlineState(robotEntity.Id, (robot) =>
{
//回调信息处理
});
public void GetRobotOnlineState(int id_Robot, GetSingleFinish<RobotEntity> finishOp = null, GetNotFinish notFishshOp = null)
{
string url = 拼接url地址
GetData_Single(url, id_Robot, finishOp, notFishshOp);
}
private void GetData_Single<T>(string url, int id, GetSingleFinish<T> finishOp = null, GetNotFinish notFishshOp = null)
{
GetDataControl<T> dataControl = GetSingleDataControl(finishOp, notFishshOp);
StartCoroutine(dataControl.GetSingleData(url, id));
}
public IEnumerator GetSingleData(string url, int id)
{
UnityWebRequest request = UnityWebRequest.Get(url + id);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
yield return request.SendWebRequest();
GetSingleResult(request);
}
private void GetSingleResult(UnityWebRequest request)
{
if (!request.isNetworkError && !request.isHttpError)
{
BaseResult<T> result = JsonConvert.DeserializeObject<BaseResult<T>>
(request.downloadHandler.text);
if (result.Code.Equals(0))
finishSingleOp?.Invoke(result.Content);
else
notFishshOp?.Invoke();
}
else
{
notFishshOp?.Invoke();
}
}
public class GamePlayerEntity
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Code { get; set; }
public string Type { get; set; }
public string Name { get; set; }
}
3、请求后端解析json代码页
using BestHTTP;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using UnityEngine.Networking;
using static DataService;
class GetDataControl<T>
{
public GetFinish<T> finishOp;
public GetSingleFinish<T> finishSingleOp;
public GetNotFinish notFishshOp;
public IEnumerator GetData(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
yield return request.SendWebRequest();
GetResult(request);
}
/// <summary>
/// 根据url地址,获取单个数据
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public IEnumerator GetSingleData(string url)
{
Debug.Print("URL: " + url);
UnityWebRequest request = UnityWebRequest.Get(url);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
yield return request.SendWebRequest();
GetSingleResult(request);
}
/// <summary>
/// 根据url地址,id,获取单个数据
/// </summary>
/// <param name="url"></param>
/// <param name="id"></param>
/// <returns></returns>
public IEnumerator GetSingleData(string url, int id)
{
UnityWebRequest request = UnityWebRequest.Get(url + id);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
yield return request.SendWebRequest();
GetSingleResult(request);
}
private void GetResult(UnityWebRequest request)
{
if (request.isNetworkError || request.isHttpError)
{
notFishshOp?.Invoke();
}
else
{
BaseResult<List<T>> result = JsonConvert.DeserializeObject<BaseResult<List<T>>>(request.downloadHandler.text);
if (result.Code.Equals(0))
finishOp?.Invoke(result.Content);
else
notFishshOp?.Invoke();
}
}
private void GetSingleResult(UnityWebRequest request)
{
if (!request.isNetworkError && !request.isHttpError)
{
BaseResult<T> result = JsonConvert.DeserializeObject<BaseResult<T>>(request.downloadHandler.text);
if (result.Code.Equals(0))
finishSingleOp?.Invoke(result.Content);
else
notFishshOp?.Invoke();
}
else
{
notFishshOp?.Invoke();
}
}
}
按照惯例,养个眼: