最新的 Nanohttpd jar 出错
Error with latest jar of Nanohttpd
我按照 SO 将 NanoHttpd 设置为从此处提供文件 -
这有效,但我需要使用 Github 的最新版本,因为它处理更多 HTTP 方法并且是项目所必需的。
我在本地构建了jar并添加并编译了APK。 Web 服务器初始化,但每个请求都返回为 Not Found
。没有其他的。也没有日志可以查看问题。怎么回事?
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Map;
import android.util.Log;
import org.nanohttpd.protocols.http.NanoHTTPD;
import org.nanohttpd.protocols.http.response.Response;
import org.nanohttpd.protocols.http.response.Status;
import org.nanohttpd.protocols.http.request.Method;
import static org.nanohttpd.protocols.http.response.Response.newChunkedResponse;
public class MainActivity extends AppCompatActivity {
public WhosebugMp3Server server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new WhosebugMp3Server();
try {
server.start();
} catch(IOException ioe) {
Log.w("Httpd", "The server could not start.");
}
Log.w("Httpd", "Web server initialized.");
}
@Override
public void onDestroy()
{
super.onDestroy();
if (server != null)
server.stop();
}
public class WhosebugMp3Server extends NanoHTTPD {
public WhosebugMp3Server() {
super(8089);
}
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parameters,
Map<String, String> files) {
String answer = "";
Log.w("HTTPD", uri);
Log.w("HTTPD", parameters.toString());
Log.w("HTTPD", "Method is: "+method.toString());
Log.w("HTTPD", "Header is: "+header.toString());
FileInputStream fis = null;
try {
fis = new FileInputStream("/storage/C67A-18F7/"
+ "/Music/"+uri);
Log.w("HTTPD", uri + " found");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newChunkedResponse(Status.OK, "audio/mpeg", fis);
}
}
}
同样的代码适用于 2.2 到 2.3
但不是最新的,2.3.2
我在 adb 中收到服务器启动提示 logcat
03-26 18:18:26.005 15056 15056 W Httpd : Web server initialized.
但所有其他请求 returns Not Found
>$ curl -X GET http://192.168.1.2:8089
Not Found
>$ curl -X GET http://192.168.1.2:8089/demo.mp3
Not Found
我找不到代码有什么问题?
您的 serve()
没有覆盖 NanoHTTPD 正在调用的任何方法。默认实现 returns "404 Not Found".
serve()
的签名是
protected Response serve(IHTTPSession session)
但是它已被弃用。查看 this commit 中介绍的 IHandler
s。 (默认处理程序仍然会调用已弃用的 serve()
方法。)
我按照 SO 将 NanoHttpd 设置为从此处提供文件 -
这有效,但我需要使用 Github 的最新版本,因为它处理更多 HTTP 方法并且是项目所必需的。
我在本地构建了jar并添加并编译了APK。 Web 服务器初始化,但每个请求都返回为 Not Found
。没有其他的。也没有日志可以查看问题。怎么回事?
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Map;
import android.util.Log;
import org.nanohttpd.protocols.http.NanoHTTPD;
import org.nanohttpd.protocols.http.response.Response;
import org.nanohttpd.protocols.http.response.Status;
import org.nanohttpd.protocols.http.request.Method;
import static org.nanohttpd.protocols.http.response.Response.newChunkedResponse;
public class MainActivity extends AppCompatActivity {
public WhosebugMp3Server server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new WhosebugMp3Server();
try {
server.start();
} catch(IOException ioe) {
Log.w("Httpd", "The server could not start.");
}
Log.w("Httpd", "Web server initialized.");
}
@Override
public void onDestroy()
{
super.onDestroy();
if (server != null)
server.stop();
}
public class WhosebugMp3Server extends NanoHTTPD {
public WhosebugMp3Server() {
super(8089);
}
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parameters,
Map<String, String> files) {
String answer = "";
Log.w("HTTPD", uri);
Log.w("HTTPD", parameters.toString());
Log.w("HTTPD", "Method is: "+method.toString());
Log.w("HTTPD", "Header is: "+header.toString());
FileInputStream fis = null;
try {
fis = new FileInputStream("/storage/C67A-18F7/"
+ "/Music/"+uri);
Log.w("HTTPD", uri + " found");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newChunkedResponse(Status.OK, "audio/mpeg", fis);
}
}
}
同样的代码适用于 2.2 到 2.3
但不是最新的,2.3.2
我在 adb 中收到服务器启动提示 logcat
03-26 18:18:26.005 15056 15056 W Httpd : Web server initialized.
但所有其他请求 returns Not Found
>$ curl -X GET http://192.168.1.2:8089
Not Found
>$ curl -X GET http://192.168.1.2:8089/demo.mp3
Not Found
我找不到代码有什么问题?
您的 serve()
没有覆盖 NanoHTTPD 正在调用的任何方法。默认实现 returns "404 Not Found".
serve()
的签名是
protected Response serve(IHTTPSession session)
但是它已被弃用。查看 this commit 中介绍的 IHandler
s。 (默认处理程序仍然会调用已弃用的 serve()
方法。)