android - 未调用嵌入式 Web 服务器 NanoHTTPD 响应服务方法

标签 android android-studio webserver nanohttpd

我有这个网络服务器类:

private class WebServer extends NanoHTTPD {

    public WebServer()
    {
        super(PORT);
        Log.i("myTag", "THIS IS RUNNING2");
    }

    @Override
    public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parameters, Map<String, String> files) {

        Log.i("myTag", "THIS IS RUNNING3");

        String answer = "";
        try {
            // Open file from SD Card
            File root = Environment.getExternalStorageDirectory();
            FileReader index = new FileReader(root.getAbsolutePath() + "/www/index.html");
            BufferedReader reader = new BufferedReader(index);

            String line = "";
            while ((line = reader.readLine()) != null) {
                answer += line;
            }
            reader.close();
        } catch(IOException ioe) {
            Log.w("httpd", answer);
        }

        return new NanoHTTPD.Response(answer);
    }
}

这是我在网上找到的 ( http://devnote1.blogspot.com/2016/05/android-studio-nanohttpd.html )。我按照教程学习了 T。

我在标签“myTag”下设置了 3 个应该在 logcat 中可见的日志,我注意到 serve() 方法中的第三个日志没有输出。在我的 android 工作室中,serve 方法有一条线贯穿其中,工具提示说:“覆盖‘import fi.iki.elonen.NanoHTTPD’中不推荐使用的方法。有人能帮我解决这个问题吗?

我正在使用这个依赖:

compile 'com.nanohttpd:nanohttpd-webserver:2.1.1'

当我进入浏览器并输入 localhost:8080 时,它并没有给我一个“无法访问站点”的错误,所以我相信某些网络服务器正在运行。任何帮助表示赞赏。谢谢

最佳答案

问题出在权限上。您必须在运行时允许权限: https://developer.android.com/training/permissions/requesting.html

如果你只是在 list 中设置它,你仍然会得到拒绝的权限。

 int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);

    if (permissionCheck == 0) {
        Log.i("perm", "granted");
    } else if (permissionCheck == -1){
        Log.i("perm", "denied");

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

    }

你必须重写它:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {

    Log.i("perm", "request code = " + requestCode);

    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.i("perm", "GRANTED");
        }
    }
    return;
}

关于android - 未调用嵌入式 Web 服务器 NanoHTTPD 响应服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45700822/

相关文章:

android - Build_HttpBody()//httpPost.setEntity() 的问题 - Android

尝试在另一个类中添加 ImageView 时,Android 应用程序崩溃

Android Studio 多个dex文件定义Lcom/abc/xyz/BuildConfig

android - 使用Android Studio在gradle中使用系统环境变量的正确方法

url - 是具有多个相邻/重复的 URL

具有 Intent 操作的 Android Activity 。SEND 获取无法打开的 uri?

java - 当 JSON 解析器找不到 JSON 对象时如何设置条件

java - 改造:URL 查询字符串不能有替换 block

apache - 正在将 tomcat 应用程序 url 设置为 http ://hostname/application/possible?

Java 小程序无法访问同一网络服务器上的非公共(public)文件