首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nanohttpd和Android服务

Nanohttpd和Android服务
EN

Stack Overflow用户
提问于 2015-10-22 02:07:40
回答 1查看 1.9K关注 0票数 2

我尝试在我的android应用程序中捕获一个与http请求一起发送的事件。到了nanohttpd,下面的代码运行正常,我收到了Hello Word作为响应,但现在,我不知道如何在每次收到html请求时在我的Android服务中执行操作(例如,制作一个简单的Toast或其他任何东西...)。如何将NanoHTTPD类与我的服务类链接起来?

我的代码:

代码语言:javascript
复制
public class WebServer extends NanoHTTPD {

    /**
    * Constructs an HTTP server on given port.
    */
   public WebServer()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";
       msg += "</body></html>\n";
       //Toast.makeText(this, "http message received", Toast.LENGTH_LONG).show();
       return new NanoHTTPD.Response(msg );
   }

}

以下是相应的Android服务:

代码语言:javascript
复制
package com.example.domomaster;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class WebService extends Service {
  private final static String TAG = "WebService";
  WebServer webServer;

  @Override
  public IBinder onBind(Intent intent) {
    Toast.makeText(this, "service bind", Toast.LENGTH_LONG).show();
    return null;
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    //Toast.makeText(this, "service starting", Toast.LENGTH_LONG).show();
    try
    {
      webServer = new WebServer();
      webServer.start();
    }
    catch( IOException ioe )
    {
      System.err.println( "Couldn't start server:\n" + ioe );
      System.exit( -1 );
    }
    Toast.makeText(this, "service Listening on port 8080", Toast.LENGTH_LONG).show();
    System.out.println( "Listening on port 8080. Hit Enter to stop.\n" );
    try { System.in.read(); } catch( Throwable t ) {
      System.out.println("read error");
    };
    return super.onStartCommand(intent,flags,startId);
  }

  @Override
  public void onDestroy() {
    super.onDestroy();
    Toast.makeText(this, "service destroyed", Toast.LENGTH_LONG).show();
  }

}
EN

回答 1

Stack Overflow用户

发布于 2016-11-28 20:50:05

NanoHTTPD启动一个运行服务器套接字的线程,这意味着公共响应服务方法是从该线程调用的,因此这里的问题变成了一个更抽象的问题:线程如何向UI线程或服务发送消息。在这种情况下,您可以从WebService向WebServer传递一个处理程序;或者从WebServer发送一个广播并由WebService接收

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33266309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档