Приложение 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());
}
}