这里将告诉您实战nanoHTTPD嵌入android app(3),教程操作步骤:

这篇咱们来解决image显示的问题。

6. 支持image

看看2000年的网易,是多么的朴(chou)素(lou)。

Image.png

所以支持主流的image也是必须滴!

有了上面的基础,其实加个图片也是个小case啦,也就是两个点:

image的类型。从上面那个表,咱们可以看到这几个,只要把它们加到咱们的if else里去,这个问题就解决了:

gif=image/gif

jpg=image/jpeg

jpeg=image/jpeg

png=image/png

如何把image的内容返回

这个问题我也不会,不过咱会谷歌。经过搜索在stackoverflow里找到这个答案,其实也异常的简单,因为nanoHTTPD有一个函数:

public static Response newFixedLengthResponse(IStatus status, String mimeType, InputStream data, long totalBytes) {

return new Response(status, mimeType, data, totalBytes);

}

有了这个,咱还怕啥,直接创建出一个InputStream给它,就能完成咱们的任务了:

InputStream isr;

try {

isr = _mainContext.getAssets().open(filename);

return newFixedLengthResponse(Response.Status.OK, mimetype, isr, isr.available());

} catch (IOException e) {

e.printStackTrace();

return newFixedLengthResponse(Response.Status.OK, mimetype, "");

}

到这里咱们已经把一个http server要提供的基本功能都实现了。

7. 总结一下

经过这个小项目,咱们能看到开源的世界充满了各种好玩的东西,只要你能找得到。不过也会发现这些东西大多都是个半成品,比如官方的例子里就没有提供如何支持访问外部html,js,css,image这些的代码,都需要经过自己的手把它们改造成适合自己的代码。

最后奉上MyServer全部代码:

public Response serve(IHTTPSession session) {

String uri = session.getUri();

System.out.println("####MyWebServer:" + uri);

String filename = uri.substring(1);

if (uri.equals("/"))

filename = "index.html";

boolean is_ascii = true;

String mimetype = "text/html";

if (filename.contains(".html") || filename.contains(".htm")) {

mimetype = "text/html";

is_ascii = true;

} else if (filename.contains(".js")) {

mimetype = "text/javascript";

is_ascii = true;

} else if (filename.contains(".css")) {

mimetype = "text/css";

is_ascii = true;

} else if (filename.contains(".gif")) {

mimetype = "text/gif";

is_ascii = false;

} else if (filename.contains(".jpeg") || filename.contains(".jpg")) {

mimetype = "text/jpeg";

is_ascii = false;

} else if (filename.contains(".png")) {

mimetype = "image/png";

is_ascii = false;

} else {

filename = "index.html";

mimetype = "text/html";

}

if (is_ascii) {

String response = "";

String line = "";

BufferedReader reader = null;

try {

reader = new BufferedReader(new InputStreamReader(_mainContext.getAssets().open(filename)));

while ((line = reader.readLine()) != null) {

response += line;

}

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

return newFixedLengthResponse(Response.Status.OK, mimetype, response);

} else {

InputStream isr;

try {

isr = _mainContext.getAssets().open(filename);

return newFixedLengthResponse(Response.Status.OK, mimetype, isr, isr.available());

} catch (IOException e) {

e.printStackTrace();

return newFixedLengthResponse(Response.Status.OK, mimetype, "");

}

}

}

如果这篇文章对各位小伙伴有帮助,敬请拿去,不用客气。 如果要转发,记得带上我的名字就好了。

参考资料:

http://programminglife.io/android-http-server-with-nanohttpd/ https://github.com/NanoHttpd/nanohttpd/blob/master/core/src/main/resources/META-INF/nanohttpd/default-mimetypes.properties /d/file/shujuku/dru0mvmpr5s

作者:tonytalks 链接:/d/file/shujuku/4a3sqcgnio5 来源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

实战nanoHTTPD嵌入android app(3)就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.

本文地址:https://c.lanmit.com/yidongkaifa/qita/8133.html

android nano app,实战nanoHTTPD嵌入android app(3)相关推荐

  1. android nano框架,实战nanoHTTPD嵌入android app(3)

    这篇咱们来解决image显示的问题. 6. 支持image 看看2000年的网易,是多么的朴(chou)素(lou). Image.png 所以支持主流的image也是必须滴! 有了上面的基础,其实加 ...

  2. android nanohttp,002.实战nanoHTTPD嵌入android app(1)

    其实这一篇跟其他人写的也差不多,所以如果你对nanoHTTPD了解的话,可以先第二篇开始看. 想没想过在自己的android app里内嵌一个http server,这样咱们就可以从PC和手机上的浏览 ...

  3. Cordova嵌入Android项目(CordovaWebView)

    Cordova嵌入Android项目(CordovaWebView) 首先,Cordova官方是有介绍如何将Cordova嵌入Android项目中的,链接Embedding Cordova WebVi ...

  4. Android NFC开发实战详解

    Android NFC开发实战详解 Android开发实战详解NFC国内第一本AndroidNFC开发书籍带你开启AndroidNFC开发的神秘之旅大综合案例帮助读者快速进入实战角色:WiFi快速连接 ...

  5. Android 数据库开发实战(简单易懂+DEMO)

    Android数据库开发实战 我们在Android开发中,如果需要本地持久化数据,可以采用SP.数据库.本地文件等方式.SP适合小数据的存取.数据库查询修改方面非常适合.文件存储适合大数据文件的操作. ...

  6. flutter嵌入原生组件_Flutter 升级到 1.12.13 后,嵌入Android原生组件的问题

    Flutter 升级到 1.12 后,使用原生Android组件有些变化,需要更新Android代码 关于 Flutter 如何嵌入Android组件请自行百度. 这里我是修改百度地图.import  ...

  7. android 保存退出之前的页面_项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)...

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/109313803 各位读者,知识无穷而人力有穷 ...

  8. 《Android Studio开发实战 从零基础到App上线(第2版)》出版后记

    2015年11月23日,鄙人在csdn发表了第一篇技术文章,掐指一算距今已有三年.遥想当年开写博客,只是为了总结经验同时分享出来,后来机缘巧合受到出版社编辑邀请并出了书,完全是无心插柳的结果.当初写作 ...

  9. 《Android Studio开发实战 从零基础到App上线》源码运行问题解答

    本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一.打开本书源码时,出现"Plugin w ...

  10. 项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/109313803 各位读者,知识无穷而人力有穷 ...

最新文章

  1. cuda 本地内存使用_CUDA 基础知识博客整理
  2. ClientDataSet建立索引和排序
  3. javascript常用技巧
  4. Chapter7-4_來自獵人暗黑大陸的模型 GPT-3
  5. ElasticSearch面试 - es 生产集群的部署架构是什么?
  6. 【BZOJ4353】Play with tree,树链剖分线段树
  7. RLock(递归锁)
  8. 利用POI 技术动态替换word模板内容
  9. java将数据从外部读入到程序称为_java复习与练习答案beta3(基本可信~~)
  10. Pytorch squeeze() 和 unsqueeze() 方法区别
  11. redis安装配置 mysql_学习环境安装 mysql 与 redis
  12. HDU 5820 Lights(扫描线+zkw线段树)
  13. Ubunt 12.04 中的QT中配置Tyin mini210 的交叉编译环境
  14. 20200703每日一句
  15. 十六进制转float
  16. 网上赚钱的平台哪个好?7个方式总有你喜欢的!
  17. C# 多文件压缩与解压
  18. 苹果电脑系统如何读取移动硬盘数据?
  19. 生活家健康指南:创可贴使用四大误区
  20. 计算机网络原理优秀视频

热门文章

  1. 通达信标记符号_通达信在股票名称后自动标记
  2. Python之快捷键
  3. [excel]解决Excel和txt转换出现的“问题
  4. QCA-WIFI技术研讨
  5. Tensorflow中PRelu实现细节
  6. word文档在线预览解决方案
  7. win10用什么软件测试xone手柄,win10系统连接xbox手柄的操作方法
  8. 我们短暂的人类世和即将到来的算法世
  9. esp32 esp8285 wf6000OTA升级小记
  10. 商旅业务知识-航信(ETERM)系统