在一般的U3D网络开发中,直接使用WWW类便足够正常使用,但我在发现使用WWW下载大文件时,会导致整个程序卡顿的情况(不清楚是否我个人电脑问题),所以干脆使用HttpWebRequest/HttpWebResponse + await/async 来代替WWW

U3D中还是在使用比较低的Mono版本,所以是不支持(await/async)的。准确来说是不支持Task<T>,而且还有些BUG(我自个能确定的就有两个),现在最希望就是U3D更新Mono版本,写代码就可以更爽了!

无奈之下,只有参照AsyncEnumerator和U3D本身的Coroutine来实现一个自用的Coroutine库,在PC中测试了,发现有时候异步读取时可能会发生没有(回)调用AsyncCallback,当时电脑确实出了点问题,重启之后此事再无发生。

随之Build成安卓版放到手机里测试下......崩了!此时,我第一步想到的是U3D在安卓下是否HttpWebRequest等?因为按道理说如果Build成功的话应该是支持的,所以新建了一个干净的项目,只包含Http相关的。

再放进去:WebException!输出信息是一堆英文,鉴于本人英语水平有限并信息无法复制,所以立即放弃了上网找原因的想法。我猜想的是应用没有访问网络的权限(安装时我没细看)。

因此,再添加一个测试原生WWW的脚本:(以证明不是我代码问题(逃)

public class DownloadWWW : MonoBehaviour {

    // Use this for initialization
void Start () {
StartCoroutine(Download());
} IEnumerator Download()
{
WWW www = new WWW("http://cn.bing.com");
yield return www;
foreach (var h in www.responseHeaders)
t += h.Key + " " + h.Value + "\n";
t += www.text;
}
string t;
int c;
void OnGUI()
{
GUILayout.Button(c++ + " ! " + t);
}
}

继续Build放到手机,这次安装我可慢慢看清楚了:应用需要新权限——网络访问。果真如此,在加了WWW之后连原先的代码都能正常运行了。

猜想,是的,我不是合格的程序员,我不想去验证:

只有在U3D编译代码时发现脚本有使用WWW 或 Networkxxx 等类时,才增加应用访问权限,否则即使只使用HttpWebRequest 或Socket也无法访问网络。
当然也可以自行在Android中增加网络权限。

最后:此文标题虽写吐槽,而我本想正正经经地写好文章,但发现写作水平以下降的小学水平,当且作为流水账看罢。

Unity3d Android Http 开发中的坑(吐槽的更多相关文章

  1. Unity3D Android手机开发环境配置

    Unity3D Android手机开发环境配置 Date:2014-01-01 07:09 1.配置eclipse环境:首先在官网下载安装包:http://developer.android.com/ ...

  2. Android应用开发中关于this.context=context的理解

    在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码.为什么要这么写呢?不写不行么? 先看下面 ...

  3. Android学习开发中如何保持API的兼容

    Android学习开发中如何保持API的兼容: 1,采用良好的设计思路 在设计过程中,如果能按照下面的方式来进行设计,会让这个API生命更长久 面向用例的设计,收集用户建议,把自己模拟成用户,保证AP ...

  4. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

  5. Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听

    原文:Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听 简单记录下android 盒子开发遥控器的监听 ,希望能帮到新入门的朋友们 不多说,直接贴代码 public cla ...

  6. 【Android】开发中个人遇到和使用过的值得分享的资源合集

    Android-Classical-OpenSource Android开发中 个人遇到和使用过的值得分享的资源合集 Trinea的OpenProject 强烈推荐的Android 开源项目分类汇总, ...

  7. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  8. 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)

    转至 (http://blog.csdn.net/yanzi1225627/article/details/17652643) 经常听人问Camera开发中,各种变形问题,今天有空就在此梳理总结下. ...

  9. Android应用开发中的夜间模式实现(一)

    前言 在应用开发中会经常遇到要求实现夜间模式或者主题切换具体例子如下,我会先讲解第一种方法. 夜间模式 知乎 网易新闻 沪江开心词场 Pocket 主题切换 腾讯QQ 新浪微博 我今天主要是详述第一种 ...

随机推荐

  1. 关于 Integer 的一个坑

    其实 JDK 中有很多小坑, 我们稍微不注意, 就掉进去了, 然后调了半天 bug, 也不知道为何. 很闹心! 这里说一下, 在Integer中的一个小坑. 看一个小例子: @Test public ...

  2. [Qt系列] 何处下载,如何安装!

    时间:2016.07.29 -------------------------------------------- 其实方法有很多! 我的思路是想独立使用它,不想联合VS. 下载地址:http:// ...

  3. VC++ 如何让ScrollView视图显示滚动条

    CSize sizeTotal; sizeTotal.cx = ;//值设大点 sizeTotal.cy = ;//值设大点 SetScrollSizes(MM_TEXT, sizeTotal); 显 ...

  4. oracle 模糊查询中的转义字符用法

    drop view aaa; create view aaa as select '_BCDE' A FROM DUAL UNION ALL SELECT 'ABCDE' FROM DUAL UNIO ...

  5. Spring - constructor-arg和property

    1.说明 constructor-arg:通过构造函数注入.    property:通过setter对应的方法注入. 2.constructor-arg的使用示例 (1).Model代码: 1 2 ...

  6. GD图片(画布)的制作及验证码的应用

    创建画布:创建画布的函数有 imagecreatetruecolor(width,height);创建画布 width指画布的宽height指画布的高 imagecolorallocate(img,r ...

  7. SQL语言

    SQL语言的分类:DDL DML DQL DCL SQL中的操作无非就是(增删改查) DDL:Data Query Language,数据查询语言! 主要是用来定义和维护数据库的各种操作对象,比如库. ...

  8. ajax实现jsonp跨域接口

    HTML页面代码: <script type="text/javascript"> function UrlSearch(){ var name,value; var ...

  9. Android "adb devices no permissions"

    列出当前连接设备时出现以下情况 [user@dell platform-tools]# ./adb devices List of devices attached ???????????? no p ...

  10. Windows自带.NET Framework版本大全

    The following is a complete list of which version of the .NET Framework is included in which version ...