7

実際、いくつかの質問を検索して、github にアクセスしました。しかし、私は新しいので、例を理解できません。

Androidでhttpサーバーを作成して、PCブラウザーでアクセスできるようにしたい。

nanohttpdを拡張するクラスのインスタンスがありましたが、サーバーが機能しません。理由はわかりませんが、私のコンピューターと電話は同じ WIFI に接続されています。

public class MyHTTPD extends NanoHTTPD {

     /**
     * Constructs an HTTP server on given port.
     */
    public MyHTTPD()throws IOException {
        super(8080);
    }


@Override
    public Response serve( String uri, Method method,
            Map<String, String> header, Map<String, String> parms,
            Map<String, String> files )
    {
        System.out.println( method + " '222" + uri + "' " );
        String msg = "<html><body><h1>Hello server</h1>\n";
        if ( parms.get("username") == null )
            msg +=
                "<form action='?' method='get'>\n" +
                "  <p>Your name: <input type='text' name='username'></p>\n" +
                "</form>\n";
        else
            msg += "<p>Hello, " + parms.get("username") + "!</p>";

        msg += "</body></html>\n";
        return new NanoHTTPD.Response(msg );
    }


    public static void main( String[] args )
    {
        try
        {
            new MyHTTPD();
        }
        catch( IOException ioe )
        {
            System.err.println( "Couldn't start server:\n" + ioe );
            System.exit( -1 );
        }
        System.out.println( "Listening on port 8080. Hit Enter to stop.\n" );
        try { System.in.read(); } catch( Throwable t ) {
            System.out.println("read error");
        };
    }

}
4

4 に答える 4

0

Android アクティビティにはライフサイクルがあり、関数を使用しませんmain()

onPauseアクティビティの一部として Web サーバーを開始および停止する場合は、 andonResumeでstart および stop を呼び出す必要があります。

public class MyActivity extends Activity {

    private MyHTTPD mServer;

    @Override
    protected void onResume() {
        super.onResume();

       try {
            mServer = new MyHTTPD();
            mServer.start();
        } catch (IOException e) {
            e.printStackTrace();
            mServer = null;
        }


    @Override
    protected void onPause() {
        super.onPause();
        if(mServer != null) {
            mServer.stop();
            mServer = null;
        }
    }
}

別の方法は、Web サーバーをサービスの一部として実装することです。

私が作業しているアプリでは、ユーザーがアプリを離れても Web サーバーを実行し続ける必要があります。これを行う唯一の方法は、アクティビティにバインドされていない長時間実行されるサービスの一部として Web サーバーを開始および停止することです。Android サービスに関する Vogella の優れたチュートリアルをご覧ください。

于 2014-12-16T18:52:41.430 に答える
0

これは私にとっては機能するコードですが、NANOHTTPD のバージョンが異なるため、ソリューションをテストする時間がありません。ここに UploadServer クラスと Nano クラスがあります。sdcard/Discover Control/Web パスから file-upload.htm を返します

public class UploadServer extends NanoHTTPD {
public UploadServer() throws IOException {
    super(8080, new File("."));
}

public Response serve( String uri, String method, Properties header, Properties parms, Properties files ) {
    File rootsd = Environment.getExternalStorageDirectory();
    File path = new File(rootsd.getAbsolutePath() + "/Discover Control/Web");
    Response r = super.serveFile("/file-upload.htm", header, path, true);
    return r;
}
}

NanoHttpd クラス

NanoHTTPD.java

ファイルのアップロード

ファイルアップロード.htm

これが役に立ち、あなたの仕事を楽しんでくれることを願っています。

于 2013-05-15T10:17:33.320 に答える