Handy App Problem...fertige App läuft nicht

  • Antworten:85
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 39

13.06.2020, 10:02:47 via Website

Hallo Forum
Ich habe eine Android Studio App für die Kommunikation mit einem Raspberry...leider läuft das fertige Programm nicht mehr und ich bräuchte mal Hilfe....folgende Fehlermeldung erscheint

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 1.219

13.06.2020, 14:14:42 via Website

Hallo lade die Datei in eine Homepage hoch oder auch bei Google stelle den link hier rein ohne das Http:\
denn du kannst ja noch keine Links posten.

am einfachsten lädst du es bei Github hoch und gibst uns den Link zum Repos.

In Übrigen sagt die die Fehlermeldung das dein Array nur einen Eintrag hat. Du aber zur Laufzeit versuchst auf Elemente deines Arrays grösser den Grenzen zuzugreifen.

int arrayTest[] = {1,2};
int x = arrayTest[2];

Das würde dir genau deinen Fehler werfen.

— geändert am 13.06.2020, 14:14:56

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

13.06.2020, 11:22:51 via App

Ohne Code und Zeile kommen wir hier nicht weiter...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

13.06.2020, 12:21:50 via Website

Pascal P.

Ohne Code und Zeile kommen wir hier nicht weiter...

wie kann ich dir ein Zip mit dem code zukommen lassen???

Hilfreich?
Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 1.219

13.06.2020, 14:14:42 via Website

Hallo lade die Datei in eine Homepage hoch oder auch bei Google stelle den link hier rein ohne das Http:\
denn du kannst ja noch keine Links posten.

am einfachsten lädst du es bei Github hoch und gibst uns den Link zum Repos.

In Übrigen sagt die die Fehlermeldung das dein Array nur einen Eintrag hat. Du aber zur Laufzeit versuchst auf Elemente deines Arrays grösser den Grenzen zuzugreifen.

int arrayTest[] = {1,2};
int x = arrayTest[2];

Das würde dir genau deinen Fehler werfen.

— geändert am 13.06.2020, 14:14:56

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

13.06.2020, 15:47:49 via App

Am besten du Postest den passenden Code hier rein oder Verlinkst auf Github/Pastebin..

Ansonsten reichen 10 Posts zun Links schreiben.
Deine E-Mail Adresse hab ich aus Spamschutzgrunden mal entfernt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

13.06.2020, 17:47:53 via Website

hallo Forum....hier habe ich das zip-file reingelegt....https noch voranstellen

://1drv.ms/u/s!AhMBHIwNTWbbjXasBlEsHM2IwdCs?e=eDEzkL

Das Problem ist, dass das APP auf dem Handy nicht läuft und die oben genannte Fehlermeldung erscheint

— geändert am 13.06.2020, 18:01:06

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

13.06.2020, 19:11:22 via Website

Das Problem scheint mir ein zeitliches Problem zu sein in deiner get_bits Klasse. Klassen bitte Groß schreiben.
Und zwar lädst du erst die Daten vom Server. Zum Zeitpunkt wo du die For Schleife kommst sind die Daten bestimmt noch nicht vom Server da . deshalb auch der Fehler. Im Debugger mit Einzelschritt ging das bestimmt da war genug Zeit um die Daten in Hinderung zu laden.

URL url = null;
    try {
        //url = new URL("http://beran-solutions.de");
        url = new URL("http://192.168.178.53/Tom_skript.php");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    HttpURLConnection urlConnection = null;
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        ausgabe = convertStreamToString(in);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        urlConnection.disconnect();
    }

    TextView editText = (TextView) view.findViewById(R.id.textView);
    //editText.setText(ausgabe);

    String[] lines = ausgabe.split("\\n");

    for (int i = 0; i < lines.length; i++) {

        String[] params = lines[i].split(":");
        String schaltern = params[0];
        String state = params[1];

        // Schalter 1
        if (schaltern.equals("0") && state.equals("0")) {

            sw1.setChecked(false);

        }........

Die Daten vom server sind zum Zeitpunkt der For Schleife noch nicht da.

Entweder warten du bist ja in einem Thread oder sinvoll asynchron abfragen des Servers.

— geändert am 13.06.2020, 19:17:21

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

13.06.2020, 19:49:43 via App

Oder gleich HTTP Libs wie Ion oder okHTTP nutzen

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

13.06.2020, 20:00:14 via Website

Hallo Jokel...vielen Dank für Deine sehr versierte Stellungsnahme...könntest Du mir helfen die App sicher zum laufen zu kriegen...sie ist für meine Heizung und ich brauch da einfach Zuverlässigkeit...ich kann kein Java und mein Programmierer hat Überlastung

Wir können es machen, wie Du möchtest...ich würde auch legal versteuert was zahlen oder Du möchtest es öffentlich im Forum machen

Viele Grüße Thomas

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

13.06.2020, 20:25:26 via Website

Auch ein Punkt ist der selbst wenn der Server dir eine Leere Datei gibt was passiert dann du geht in die for Schleife und da keine daten vorhanden sind wird der fehler erzeugt. Du soltest schon vorher prüfen ob du auch daten hast. Ob dein inputstream auch etwas geliefert hat.
Denn auch wenn nichts in dem buffer ist wird die for Schleife mindestens einmal durchlaufen und das ist schon zuviel.

Auch wenn etwas mit deine connection schief geht fängst du das zwar in catch block ab. Aber in die for Schleife gehst du immer. Das ist falsch.

Eigentlich ist das so das er wartet bis in dem inputstream etwas ankommt. Prüfen ob du gültige Daten hast tust du nicht.
Auch bei einer fehlerhaften verbindung gehst du in den catch block soweit richtig. Nur wenn du in den catch warst geht es weiter mit der for Schleife. Falsch.

Als erstes setze die for Schleife auch in den try Block. Damit wenn ein Verbindungs Fehler passiert du nicht in die for Schleife kommst.
Und prüfe auf Inhalt vor der for Schleife.

Frage hast du den Code geschrieben oder dein Programmierer?

— geändert am 13.06.2020, 20:42:21

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

13.06.2020, 20:37:28 via App

Was soll denn die App machen? Vlt kannnst du xas ja als WebApp umsetzen weil PHP Skripte hast du ja schon geschafft

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

13.06.2020, 20:56:30 via Website

Die Handy App dient als Visualisierung und Bedienfeld um über einen Raspberry 3 auf eine Siemens S7 300 zu gehen um einfach mit einer begrenzten Anzahl Taster und Schalter steuern zu können. Wir können das gerne öffentlich machen... brauche dann halt noch Mal einen Tipp...what to do

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

13.06.2020, 21:06:12 via Website

Eine s7 sollte auch mit einem WLAN Modul laufen sein. Somit könntest du auch direkt ohne ras auf die sps zugreifen.

Du bist ja sowieso nur im lokalen Netz. Deine IP ist ja lokal.

https://www.google.com/aclk?sa=l&ai=DChcSEwjlgYPRvv_pAhUIgFAGHbojACkYABACGgJkZw&sig=AOD64_1n1AHsD9y4Zach3-EF7mlS7evYFA&q&adurl&ved=2ahUKEwju3vrQvv_pAhWtQkEAHchEAawQ0Qx6BAgPEAE

— geändert am 13.06.2020, 21:10:28

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

13.06.2020, 22:03:09 via Website

Entweder wie Jokel sagt oder auf dem PI eine WebApp bzw. mobile Seite, falls dies für dich einfacher ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

14.06.2020, 09:47:03 via Website

Hallo Jokel, hallo Pascal, hallo Forum

ich möchte mein Projekt jetzt so vollends durchziehen mit Android studio, wie können wir die Problemlösung aufteilen, ich würde es gerne öffentlich machen, brauche hierfür aber eine Vorgehensanleitung

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

14.06.2020, 10:13:05 via Website

Da würde ich eine Organisation auf github empfehlen. Wo du verschiedene Entwickler einlässt. Eine Organisation deshalb weil sonst jeder seinen Account benutzen muss um auch Programm Teile zu posten. Sonst kann man jeder nur seine Änderung in seinem account posten. Die anderen können dann immer nur lesen.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 1.219

14.06.2020, 10:16:37 via Website

Interessant wäre auch erstmal zu wissen welche Daten dein php sendet und welche Daten du an das php senden kannst.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.012

14.06.2020, 10:19:22 via Website

Genau was Jokel sagt.
Was macht dein PHP.
Anschließen kannst du dir überlegen ob die HTTP Requests mit https://github.com/koush/ion einfacher sind, weil du kein AsyncTask brauchst und direkt ein Callback hast, wenn alles geladen ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 39

14.06.2020, 10:41:33 via Website

ja, ich verstehe so kommen wir nicht weiter...aber das mit dem Github krieg ich auch nicht hin...ich könnte die PHP Dateien ebenfalls in die Cloud stellen

— geändert am 14.06.2020, 10:57:05

Hilfreich?
Diskutiere mit!
Empfohlene Artikel bei NextPit