рабочий пример nanohttpd в студии Android

Я пытался запустить простой сервер nanohttpd, но не могу понять, как его настроить. Я пытался следовать этому руководству: Использование NanoHTTPD в Android попробовал первый ответ, но я получаю сообщение об ошибке в этой строке: "private WebServer server;" "не удается разрешить символ "Веб-сервер""

также пробовал следующее: /wiki/How-to-use-NanoHttpd еще одна ошибка в этой строке: "return newFixedLengthResponse(sb.toString());" «Ошибка «newFixedLengthResponse не может быть устранена».

Я попытался просто добавить nanohttpd.class, а также импортировать nanohttpd.jar, но, похоже, ничего не изменилось.

Кто-нибудь знает простое руководство «Hello World» для nanohttpd, которое действительно работает? Или, может быть, более документированный простой веб-сервер для Android?


person user3197004    schedule 29.09.2015    source источник


Ответы (1)


Вот код довольно простого приложения, которое я написал с помощью NanoHTTPD. Он называется «ClockServer», потому что я использую его в приложении для цифровых часов, чтобы можно было удаленно устанавливать цвет цифр часов, цвет фона и яркость.

Я создаю экземпляр класса ClockServer в подклассе приложения моего приложения. Как видите, метод serve возвращает такой результат:

return new NanoHTTPD.Response(Response.Status.OK, MIME_JSON, responseString);

Вот класс ClockServer:

import android.content.res.Resources;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;


public class ClockServer extends NanoHTTPD {

    private static final String MIME_JSON = "application/json";
    private Clock clock;

    public ClockServer(Clock clock, int port) {
        super(port);
        this.clock = clock;
    }

    @Override
    public Response serve(IHTTPSession session) {
        try {
            Method method = session.getMethod();
            String uri = session.getUri();
            Map<String, String> parms = session.getParms();
            String responseString = serveClock(session, uri, method, parms);
            return new NanoHTTPD.Response(Response.Status.OK, MIME_JSON, responseString);

        } catch (IOException ioe) {
            return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage());
        } catch (ResponseException re) {
            return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage());
        } catch (NotFoundException nfe) {
            return new NanoHTTPD.Response(Response.Status.NOT_FOUND, MIME_PLAINTEXT, "Not Found");
        } catch (Exception ex) {
            return new Response(Response.Status.INTERNAL_ERROR, MIME_HTML, "<html><body><h1>Error</h1>" + ex.toString() + "</body></html>");
        }
    }

    private String serveClock(IHTTPSession session, String uri, Method method, Map<String, String> parms)  throws IOException, ResponseException {
        String responseString = "";
        do {
            if(Method.GET.equals(method)) {
                responseString = handleGet(session, parms);
                break;
            }

            if(Method.POST.equals(method)) {
                responseString = handlePost(session);
                break;
            }

            throw new Resources.NotFoundException();

        } while(false);

        return responseString;
    }

    private String handleGet(IHTTPSession session, Map<String, String> parms) {
        return clock.handleRequest("{'name':'status', 'value':''}");
    }

    private String handlePost(IHTTPSession session) throws IOException, ResponseException {
        Map<String, String> files = new HashMap<String, String>();
        session.parseBody(files);

        return clock.handleRequest(files.get("postData"));
    }


    private class NotFoundException extends RuntimeException {
    }
}
person GreyBeardedGeek    schedule 29.09.2015
comment
Ваш сервер часов будет работать всегда? Даже после того, как ваше приложение убили? - person Sakkeer Hussain; 05.07.2016