¿Cómo crear un servidor nanohttpd en android?

En realidad, había buscado algunas preguntas e ir al github. Pero soy nuevo, no entiendo el ejemplo.

Quiero crear el servidor http en android para que pueda acceder a él en el navegador de la PC.

Tuve instancia de una clase extender nanohttpd, pero el servidor simplemente no funcionan. No sé por qué, mi equipo y el teléfono están en el mismo WIFI, uh …..

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"); }; } } 

Su código de ejemplo le falta un pequeño detalle: crea el servidor, pero nunca llama al método "start ()" que lo activa para escuchar las conexiones entrantes. En su método main (), podría escribir

  (new MyHTTPD()).start(); 

Y todo estaría bien, su servidor respondería de la manera que usted esperaba que lo haría.

La razón por la que funciona de esa manera es doble: Quiero que el constructor para ser una operación barata, barata, sin efectos secundarios. Por ejemplo, mientras que la prueba de unidad, llamo "start ()" en la configuración y "stop ()" en los métodos de desmontaje de mi prueba jUnit.

Este es el código que funciona para mí, pero tengo la versión diferente de NANOHTTPD, no tengo tiempo ahora para probar su solución. Aquí está la clase UploadServer y la clase Nano. Vuelvo file-upload.htm desde sdcard / Discover Control / Web path

 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; } } 

Clase NanoHttpd

NanoHTTPD.java

SUBIR ARCHIVO

File-upload.htm

Espero que esto ayude y disfrute de su trabajo.

Las actividades de Android tienen un ciclo de vida y no utilizan una función main() .

Si desea iniciar y detener el servidor web como parte de la actividad, entonces necesita iniciar y detener la llamada en onPause y onResume , es decir

 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; } } } 

Una alternativa es implementar el servidor web como parte de un Servicio.

En una aplicación que estoy trabajando tengo un requisito para mantener el servidor web en ejecución, incluso si el usuario deja la aplicación. La única manera de hacerlo es iniciar y detener el servidor web como parte de un servicio de larga duración que no está vinculado a la actividad. Vea el gran tutorial de Vogella sobre los servicios de Android .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.