2

NanoHTTPD を使用してカスタム Web サーバーを実装しています。NanoHTTPD を拡張する BaseServer クラスがあります。

public class BaseServer extends NanoHTTPD {

public BaseServer(int port) {
    super(port);
    // TODO Auto-generated constructor stub
}

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

    StringBuilder sb = new StringBuilder();
    sb.append("<html>");
    sb.append("<head><title>Debug Server</title></head>");
    sb.append("<body>");
    sb.append("<h1>Response</h1>");
    sb.append("<p><blockquote><b>URI -</b> ").append(uri).append("<br />");
    sb.append("<b>Method -</b> ").append(method)
            .append("</blockquote></p>");
    sb.append("<h3>Headers</h3><p><blockquote>").append(header)
            .append("</blockquote></p>");
    sb.append("<h3>Parms</h3><p><blockquote>").append(parms)
            .append("</blockquote></p>");
    sb.append("<h3>Files</h3><p><blockquote>").append(files)
            .append("</blockquote></p>");
    sb.append("</body>");
    sb.append("</html>");
    return new Response(sb.toString());

}

}

そして、このコードでこのクラスを使用するアクティビティ:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        bs.start();
        Toast.makeText(this, "Server Started", 1).show();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.getMessage(), 3).show();
    }
}

サーバーは正しく起動しますが、ブラウザからリクエストを送信すると、アプリが強制終了されます!

以下のコードが実行されると(tryブロックにあります)、ポインターは最終ブロックに移動します!!! (キャッシュではありません)そして、私は自分の電話に強制終了を送信します!!

ByteBuffer fbuf = f.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, f.length());

f は null (ファイルが送信されていません!) であり、このコードはこの状態を処理する必要があります!

4

2 に答える 2

2

Android で実行し、一時ファイルを書き込む場合、アプリケーションにアクセス許可を追加する必要があります。パーミッションがない場合、ファイルを開くと例外がスローされ、問題が発生します。私の頭の上から、 AndroidManifest.xml に追加する必要がある許可は

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

試してみてください!

于 2013-06-14T03:06:19.473 に答える