HTTP GET ohne Response

R

RacingSystems

Gast
Hallo,

ich brauche mal eure Hilfe.

Ich habe mir einen ESP32 programmiert um mit diesem LEDs zu schalten, sind ein paar Effekte mehr nicht, das ganze funktioniert aktuell über eine Website die auf dem ESP32 gehostet wird, alles ganz einfach gehalten.

Ich möchte nun die HTML Seite als App nachbauen, alles soweit kein Problem, mittlerweile funktionieren die Buttons auch damit sich auf dem ESP32 was tut, allerdings, hier kommt jetzt auch das Problem, dauert das einfach Ewigkeiten, derzeit mache ich das auf folgende Weise:

Java:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final RequestQueue queue = Volley.newRequestQueue(this);

        Button ledmodus0;
        ledmodus0 = findViewById(R.id.ledmodus0);
        ledmodus0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String url ="http://192.168.1.1/ledmodus0";

                // Request a string response from the provided URL.
                StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

                queue.add(stringRequest);

            }
        });

    }

In meinen Augen ist das viel zu viel Code für das bisschen, ich muss eigentlich nur im Hintergrund einmal kurz "http://192.168.1.1/ledmodus0" öffnen/anfrage und das war es auch schon (das ganze auch für 1,2... usw.), ich brauche keine Rückmeldung, der Befehl muss einfach nur stumpf ausgeführt werden.

Leider bin ich nur Hobbyentwickler und habe noch nie etwas nach Außen hin gebaut ich bin immer Lokal auf den Geräten geblieben, kann mir jemand weiterhelfen?
 
Hallo @RacingSystems

a) Das ist der MinimalCode - du wirst auch noch mehr bekommen ,wenn du den Response parst , egal ob mit JSoup oder JSON
b) und das ist auch richtig , was du da gemacht hast - ich wende es genau so an , allerdings mit dem IO Broker und SImpleAPI.

Allerdings baut man einen HTTP Request nicht in einen OnClick Routine ein - in dem Falle Volley,
sondern lagert das Ganze schön in eine Klasse mit Calls aus.
Also weg von der Mainactivity , hin zu einer eigenen Klasse und dann mit Setter/Getter arbeiten und ggf einen Listener verwenden.
Zumal du ja später bestimmt eine Art Push haben willst und das wahrscheinlich regelmäßig zum Pollen und einem Thread.
Ansonsten arbeitet man auch hier grundsätzlich eher mit MQTT.

Zu deinem Get- Request kann ich allerdings nichts sagen, da ich nicht weis welchen ESP Http Server client du dort aufgesetzt
hast und vor allem : Was kommt als Response zurück - auch wenn du es nicht brauchst.
 
Zuletzt bearbeitet:
Hallo die wartezeit wird wohl daran liegen. Das du den request nicht beantwortest also der Server keine Antwort schickt. Somit wartet volley bis es den nechsten Befehl request sendet.
Schaue mal ob dein error listener mit einem timeout durchlaufen wird.

Volley erwarte immer einen response.
Im http Protokoll ist so das immer ein respons auf einen request erwartet wird. Ein Zeichen reicht als Antwort. Du musst es in deiner app ja auch nicht auswerten.
Aber der Server sollte eine Antwort auf ein get geben. Sonst wartet volley auf das timeout.

Ansonsten könntest du es ohne Volley machen. Eine HttpURLConnection diese bitte in einen Thread.

Volley hält sich an das Http Protokoll.
Du oder dein Server nicht wenn du keine Response schikst.
 
Zuletzt bearbeitet:
Und bevor wir hier weiter rätseln : Zeig mal bitte deinen C Code
 
Zuletzt bearbeitet:
@swa00 er sagt ja schon das er keinen Response schikt. Auch im Tittel dieses Threads.

Und Volley erwartet auf einen Get eine Antwort kommt keine gibt es einen Timeout. Solange wartet sein Code mit dem abschicken einer neuen get Anfrage.
 
Moin Jörg ,
er sagt ja schon das er keinen Response schikt.

Neee, schreibt er nicht eindeutig :)

ich brauche keine Rückmeldung, der Befehl muss einfach nur stumpf ausgeführt werden.

Und da ist der Knackpunkt - "braucht" er keine Responseauswertung im Volley ( weshalb die leer ist)
oder schickt er gar nichts aus seinem ESP32 .
Bei meinen 8266 schicke ich immer was Dämliches zurück - und ich denke , dass hat er weg gelassen.
(Deshalb wollte ich seinen C-Code sehen)

Aber er war eben eh online und hat unsere Beiträge gelesen - Vielleicht kommt ja noch was von ihm
 
Zuletzt bearbeitet:
Tittel
HTTP GET ohne RESPONSE.

Und ich have da selber mal vor einiger Zeit gestest. Ein php was keine Antwort gibt. Und was passiert in volley es wartet auf dem timeout und geht in den error listener. Wenn du es nicht glaubst teste selber.
Wenn du die Doku von http anschaust wird immer auf einen Get eine Antwort erwartet.

Es gibt keinen get ohne Antwort. Alles andere entspricht nicht den Protokoll Vorgaben. RFC

Volley Arbeit nach dem RFC
 
Jörg , wir reden aneinander vorbei :) Und dennoch das Gleiche

Du hast absolut recht , Volley geht in den Timeout, wenn kein Response kommt.

Hier hat er aber sehr wahrscheinlich den Fehler dann in seinem C Code auf dem ESP32.
Alle in der Regel aufgeführten Bespiele aus dem Netz arbeiten ohne Response vom HTTP-Server auf dem ESP.
Und das wird ihm jetzt bei Volley zum Verhängnis.

Deshalb hatte ich geschrieben , dass es zwingend notwendig ist, den C Code so zu erweitern , dass für
Android und Volley ein Response aktiv gesendet werden muss, und wenn es nur ein dämliches Byte ist :)

Der http-Server vom ESP / 8266 tut dies nämlich nicht von sich aus - nicht einmal einen Header
 
Zuletzt bearbeitet:
Ja das weiß ich habe ich auch gesagt das er eine Antwort schiken muss. Wenn er Volley benutzen will.

Ich sagte auch ein Zeichen reicht.

. Alle in der Regel aufgeführten Bespiele aus dem Netz arbeiten ohne Response vom HTTP-Server auf dem ESP.
.
Entweder er ändert das.

Oder kein volley und nur eine HttpURLConnection ohne inputsteam.
 
Zuletzt bearbeitet:
Na ja , er wird es dann wohl dann mal umsetzen :)
Oder wir hören - wie so oft - nichts mehr vom TE :)
 
Mit der zweiten Variante wirst du recht haben.
 
Vielen Dank für die vielen Antworten, ich werde das mal mit HttpURLConnection ohne Inputstream ausprobieren statt dem Volley. Ich brauche die Antwort nicht, wie gesagt Stumpf den Befehl abschicken reicht mir vollkommen aus. Ich werde berichten ob ich es hinbekommen habe.
 
Wie ich schon sagte Netzwerk Verbindungen immer in einen Thread oder Asynctask.

Code:
Thread mThread = new Thread() {
            @Override
            public void run() {
                try {
                    URL url = new URL("http://192.168.0.104/");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.getInputStream();
                    urlConnection.disconnect();
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        };
        mThread.start();
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: swa00

Ähnliche Themen

L
Antworten
15
Aufrufe
907
jogimuc
J
M
  • maksimilian
Antworten
6
Aufrufe
1.557
maksimilian
M
L
Antworten
3
Aufrufe
1.314
deek
D
Zurück
Oben Unten