在方法Response NanoHTTPD上显示Toast

时间:2018-02-14 04:59:06

标签: android android-context toast nanohttpd

我使用 shell_exec('./php_root '.$cmd);//execute from wrapper this)制作简单的服务器。我也按照this教程进行测试。我在GitHub上搜索问题,但我还没有找到任何解决方案。我只想在有人打开浏览器中我的项目提供的地址时显示一个简单的NanoHTTPD

以下是我的Server.class的代码:

Toast

我有一个带有静态Context的单例类,所以我可以保证上面代码中的public class Server extends NanoHTTPD { private static Server server = null; Context context; @Override public Response serve(IHTTPSession session) { String msg = "My Server in Android\n"; // context = ProgramProperties.getAppContext(); if (session.getMethod() == Method.GET) { Map<String,String> headers = session.getHeaders(); if (headers.get("username") != null) { String username = headers.get("username"); msg += "Hi, " + username; /* Output for browser */ // Toast.makeText(context, "Receive Connection, Hello " + username , Toast.LENGTH_SHORT).show(); } else { msg+="Wrong headers parameters"; // Toast.makeText(context, "Receive Connection with null header", Toast.LENGTH_SHORT).show(); } } return newFixedLengthResponse(msg + "</body></html>"); } private Server() throws IOException { super(8080); } public static Server getServer() throws IOException{ if(server == null){ server = new Server(); } return server; } } 不为null。

问题是,当我像上面那样评论第context行时,一切都正常。用户的浏览器显示Toast方法的输出。但是当我使用Response时,它就像Android没有将数据发送到浏览器中,因此浏览器无法显示正确的输出。

修改

这是我的日志:

Toast

3 个答案:

答案 0 :(得分:1)

您无法在NanoHttpd的serve()中显示Toast(),因为它是在线程中执行的。

确实你不会看到异常。他们已经被nano纳入了。

答案 1 :(得分:0)

Context context的IMO问题 请尝试getApplicationContext()而不是context

Toast.makeText(getApplicationContext(), "Receive Connection, Hello " + username , Toast.LENGTH_SHORT).show();

所以在Constructor

中创建Server
public Server (Context ctx){

this.context = ctx;

}

并调用此构造函数来初始化Activity Class中的Context对象

Server server = new Server (MainActivity.this);

答案 2 :(得分:0)

正如上面的@pskink评论。我已经解决了这个问题。谷歌搜索此关键字android toast background thread,我找到了解决方案。也许这将有助于其他未来。代码下方:

handler.post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context, "Receive Connection, Hello " + username , Toast.LENGTH_SHORT).show();
                }
            });