我正在使用NanoHTTPD实现自定义Web服务器。
我有扩展NanoHTTPD的BaseServer类:
public class BaseServer extends NanoHTTPD {
public BaseServer(int port) {
super(port);
// TODO Auto-generated constructor stub
}
@Override
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parms,
Map<String, String> files) {
StringBuilder sb = new StringBuilder();
sb.append("<html>");
sb.append("<head><title>Debug Server</title></head>");
sb.append("<body>");
sb.append("<h1>Response</h1>");
sb.append("<p><blockquote><b>URI -</b> ").append(uri).append("<br />");
sb.append("<b>Method -</b> ").append(method)
.append("</blockquote></p>");
sb.append("<h3>Headers</h3><p><blockquote>").append(header)
.append("</blockquote></p>");
sb.append("<h3>Parms</h3><p><blockquote>").append(parms)
.append("</blockquote></p>");
sb.append("<h3>Files</h3><p><blockquote>").append(files)
.append("</blockquote></p>");
sb.append("</body>");
sb.append("</html>");
return new Response(sb.toString());
}
}
以及通过以下代码使用此类的活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
bs.start();
Toast.makeText(this, "Server Started", 1).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(this, e.getMessage(), 3).show();
}
}
我的服务器正常启动,但是当我从浏览器发送请求时,我已强制关闭我的应用程序!
当下面的代码被执行时(在try块中),指针转到最终块!!! (不缓存),我向我的手机发送了一个逼近信号!
ByteBuffer fbuf = f.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, f.length());
f为空(未发送文件!),此代码应处理这种情况!,不是吗?!
最佳答案
当您在Android上运行并写入临时文件时,需要向您的应用程序添加权限。未经许可,打开文件将引发异常,并导致不良后果。我想,您需要添加到AndroidManifest.xml中的权限是
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
试试看!