Unity http请求封装(www)

项目中需要经常访问后台,以任何需求都只写一遍代码的想法决定对www进行一下封装,目的即是让程序在每个访问后台的入口保持唯一,同时可以自己定制回调函数,处理每一个访问http请求:

首先看了其他网友的文章,访问www方法如下:

WWW __request = new WWW(__url);
yield return __request;
if(string.IsNullOrEmpty(__request.error)){
   //doing something
}else{
   //doing something
}

首先我希望访问http方法要是单例,但是如果用协程的方法(yield)必须要继承MonoBehaviour,所以先写一个继承MonoBehaviour的单例

public class _InstanceMonoBehaviour<T> : MonoBehaviour where T : MonoBehaviour  
...
然后写一个访问http的单例类

//
//  HttpTool.cs
//  EndlessRunner
//
//  Created by jiabl on 09/06/2017.
//
//
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public delegate void HttpRequestEventHandle(string __request);

/// <summary>
/// Http tool.
/// 当需要请求http的时候调用Request方法
/// 例子:
/// HttpTool.Instance.Request("www.baidu.com",new HttpRequestEventHandle(myfunc))
/// void myfunc(string str) {do something]
/// </summary>
public class HttpTool : _InstanceMonoBehaviour<HttpTool> {
	/// <summary>
	/// http请求
	/// </summary>
	/// <param name="url">URL.</param>
	/// <param name="fa">Fa.</param>
	/// 
	public void Request(string __url,HttpRequestEventHandle __eventHandle){
		StartCoroutine(httpRequest(__url,__eventHandle));
	}
	/// <summary>
	/// Request the specified __url, __eventHandleForComplete and __eventHandleForError.
	/// </summary>
	/// <param name="__url">URL.</param>
	/// <param name="__eventHandleForComplete">Event handle for complete.</param>
	/// <param name="__eventHandleForError">Event handle for error.</param>
	public void Request(string __url,HttpRequestEventHandle __eventHandleForComplete,HttpRequestEventHandle __eventHandleForError){
		StartCoroutine(httpRequest(__url,__eventHandleForComplete,__eventHandleForError));
	}


	/// <summary>
	/// Https the request.
	/// </summary>
	/// <returns>The request.</returns>
	/// <param name="url">URL.</param>
	public IEnumerator httpRequest(string __url,HttpRequestEventHandle __eventHandle){
		WWW __request = new WWW(__url);
		yield return __request;

		if(string.IsNullOrEmpty(__request.error)){
			onHttpRequestCompleted(__request.text,__eventHandle);
		}else{
			Debug.Log("<====== http request error! =======> info: url=>"+__url+" request error: "+__request.error);
		}
	}
	/// <summary>
	/// Https the request.
	/// </summary>
	/// <returns>The request.</returns>
	/// <param name="__url">URL.</param>
	/// <param name="__eventHandleForComplete">Event handle for complete.</param>
	/// <param name="__eventHandleForError">Event handle for error.</param>
	public IEnumerator httpRequest(string __url,HttpRequestEventHandle __eventHandleForComplete,HttpRequestEventHandle __eventHandleForError){
		WWW __request = new WWW(__url);
		yield return __request;

		if(string.IsNullOrEmpty(__request.error)){
			onHttpRequestCompleted(__request.text,__eventHandleForComplete);
		}else{
			onHttpRequestFailed(__request.text,__eventHandleForError);
			Debug.Log("<====== http request error! =======> info: url=>"+__url+" request error: "+__request.error);
		}
	}

	/// <summary>
	/// http请求后的回调方法.
	/// </summary>
	/// <param name="__requestText">Request text.</param>
	/// <param name="__eventHandle">Event handle.</param>
	private void onHttpRequestCompleted(string __requestText,HttpRequestEventHandle __eventHandle){
		__eventHandle(__requestText);
	}
	/// <summary>
	/// http请求失败的回调方法
	/// </summary>
	/// <param name="__requestText">Request text.</param>
	/// <param name="__eventHandle">Event handle.</param>
	private void onHttpRequestFailed(string __requestText,HttpRequestEventHandle __eventHandle){
		__eventHandle(__requestText);
	}
}


其中用了委托的方法处理回调函数

调用方法如下:

HttpTool.Instance.Request("https://www.baidu.com",new HttpRequestEventHandle(requestEventForPromotion));


//	void requestEventForPromotion(string resquest){
//		Dictionary<string, object> response = (Dictionary<string, object>)Json.Deserialize(resquest);
//
//		if (response.ContainsKey("img"))
//		{
//			WWW imgRequest = new WWW((string)response["img"]);
//			// do something...
//		}
//	}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值