0

Android アプリで nanoHTTP を使用して、rawディレクトリに配置されたファイル index.html を提供しようとしています。

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 をロードしますが、ページを更新すると、答えは空の文字列になります。私は何を間違っていますか?

4

1 に答える 1

0

OK、このページから間違いを見つけまし

InputStreamは 1 回だけ読み取ることができます。アプリがページを提供する必要があるたびに 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);
    }

そして、 convertStreamToString関数にfinallyブロックを追加して、InputStream を閉じます。

    finally {
        try {
            is.close();
        } catch (IOException e) {
            Log.w("LOG", e.getMessage());
        }
    }
于 2013-10-10T14:37:20.117 に答える