Приложение Android, использующее nanoHTTP, не может обработать обновление страницы

Я пытаюсь использовать nanoHTTP в приложении для Android, чтобы обслуживать файл index.html, помещенный в директорию raw.

MainActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    .
    r = getResources();
    is = r.openRawResource(R.raw.index);

MyWebServer.java

    @Override
    public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parms, Map<String, String> files) {
    .
    .
    .
    answer = convertStreamToString(this.mainFile);
    return new NanoHTTPD.Response(answer);
    }

    private static String convertStreamToString(InputStream is) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append((line + "\n"));
        }
    } catch (IOException e) {
        Log.w("LOG", e.getMessage());
    }
    return sb.toString();
}

Этот код загружает index.html в первый раз безупречно, но если я обновлю страницу, то ответ будет пустой строкой. Что я делаю неправильно?

1 ответ

Решение

Хорошо, я нашел свою ошибку на этой странице. Получение InputStream для чтения более одного раза, независимо от markSupported ()

InputStream может быть прочитан только один раз. Я изменил код, чтобы заново открывать InputStream каждый раз, когда приложение должно обслуживать страницу.

Модифицированный код здесь: MyWebServer.java

    @Override
    public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parms, Map<String, String> files) {
    .
    .
    .
    this.mainFile = this.mr.openRawResource(R.raw.index);
    answer = convertStreamToString(this.mainFile);
    return new NanoHTTPD.Response(answer);
    }

и добавьте блок finally в функцию convertStreamToString, чтобы закрыть InputStream.

    finally {
        try {
            is.close();
        } catch (IOException e) {
            Log.w("LOG", e.getMessage());
        }
    }
Другие вопросы по тегам