würde aber auch sagen das beim senden was schief geht
Process: com.tcp.passwordkeeper, PID: 8698
Das musst du mal auf deinen Server schauen. Was da los ist.
würde aber auch sagen das beim senden was schief geht
Process: com.tcp.passwordkeeper, PID: 8698
Das musst du mal auf deinen Server schauen. Was da los ist.
es sieht mir so aus als ob der Main thread zu lange blockiert wird .
Das mit der while schleife ist nicht gut so zuwarten bis der thread fertig ist. Damit blockiert du dir den Main thread.
Macht somit auch keinen Sinn das du eine thread benutz wenn du somit den Main trotzdem anhählst.solange der thread läuft. Das macht absolut keinen Sinn.
Es würde auch viel mehr sinn machen die sende Methode in einem thread laufen zu lassen.
Teste wie lange es dauert bis die Daten gesendet sind.
Ansonsten weiß ich auch nicht weiter.
zeige mal wie du jetzt den Aufruf der send Methode jetzt machst
was den genau ?
setze dir an das ende und anfag der Methoden ein Log. Bei connect und send.
Dann sieht was zuerst ausgeführt wird und was auch zuerst beendet wird.
Du erstellst die Verbindung in einem eigenen thread.
One zu prüfen ob der thread fertig ist und die Verbindung steht.
Sendest du schon.
Wenn du es ohne thread machst geht das da der sende Befehl warten muss bis die Verbindung steht.
Du startest das senden und Verbindung aufbauen quasi zur selben Zeit.
Baue die Verbindung vorher auf zb In der onRenume Methode und In der onpause wieder beenden.
der letzte Code vom Button geht oder nicht?
was ich wissen wollte ist Ob du immer die gleiche Instanz deiner Klasse benutzt oder ob du in einer anderen activity wieder eine neue Instanz deiner Klasse erstellst.
Bei ei er neuen Instanz sind alle Daten wieder auf null. Ist ja ach ein anderes Objekt. Wenn du nun die Verbindung mit dem einem Objekt erstellst und mit einem anderen Objekt senden willst kann das nicht gehen. Weil das zweite Objekt nicht das socket vom ersten hat.
Ps Post haben sich Überschnitten.
den Code hatten wir ja schon. Ich wollte wissen von wo du welche Methode aufrufst . Alles aus einer activity oder verschiedene.
lösung wäre zb eins singelton klasse
erkläre mal etwas genauer.
Von wo willst zugreifen? Wo ist der Code den du gepostet hast.
Wenn du zb. In einer activity die Verbindung aufbaust und in einer anderen Aktivity wieder eine neue Instanz deiner vermeintlichen Klasse erstellst ist das nicht die gleiche Instanz und somit hast du auch andere Daten in der Klasse.
hier das könnte helfen
https://de.m.wikibooks.org/wiki/Googles_Android/_TCP-Sockets
Wenn du kein Paket zurück bekommst stimmt etwas mit deinem Server nicht.
Hast du überhaupt die permission für Internet und Netzwerkzugriff gesetzt?
Im manifest.
Aus dem String ein InetAddress Obekt erzeugen und das bei Socket verwenden.
Was sonnst. LInk zur Doku habe ich dir doch nun schon rausgesucht.
Hallo Willkommen im Forum.
Die IP ist kein String sondern ein Objekt von InetAddress( )
Socket(InetAddress address, int port)
https://developer.android.com/reference/java/net/InetAddress
https://developer.android.com/reference/java/net/Socket
Klar das du so einen NullPointer bekommst
Hallo
Das was du hast ist ja kein String sondern ein Byte Array.
Wie du richtig sagst kann man ein Zip an dem Anfang erkennen der ist PK und dann kommen angaben in Hex.
https://www.hummel1.de/prog/zipview/zipstruc.htm
Schaue dir mal ein Zip mit einen Hex-Editor an.
Die Bytes nach den ersten Zwei „PK“ sind keine Charter die im ASCII Code ein Zeichen oder Buchstaben entspricht, deshalb die komischen Zeichen. Die du als Platzhalter sehen kannst.
Weil das keine Druckbaren, Anzeigbaren Zeichen sind. Der hex wert ist trotzdem vorhanden.
In Punkto Speicherverbrach hat @Xcreen natürlich recht. Wenn es nur wenige Bytes sind und nicht erst eine Datei erstellen willst, du das Array am Anfang auf das „PK“ prüfen willst dann in etwa so.
byte[] zipArray = {0x50, 0x4b, 0x03, 0x04, 0x14, 0x20, 0x02, 0x20, 0x08, 0x20};
String zipString = "";
for (int i=0; i<4; i++){
zipString= zipString+zipArray[i];
}
if( zipString.equals("807534")) {
// ist ein Zipfile
}
// hier wird leider noch mehr speicher verbraucht
// weil das ByteArry in ein StringArry gewandelt wird so wie du es gemacht hast
zipString = new String(zipArray);
String st = zipString.substring(0,4);
String testZip = "PK"+(char)0x03+(char)0x04;
if (st.equals( testZip )){
// ist ein Zipfile
}
Alles anzeigen
ja ich weiß was das sein sollte.
nur würde ich es so machen
fun ByteArray.unzip() = GZIPInputStream(this.inputStream()).bufferedReader(UTF_8).use { it.readText() }
Hi was hast du immer mit deinen this ?
Du willst einer Klasse eine Methode hinzufügen, erweitern.
Da würde mich mal dein Aufruf der neuen Methode Interessieren.
Wenn du es in einer kompakten Funktion haben willst dann bitte so.
Hallo
eine Frage was soll 'is' denn sein glaube nicht das ein bezeichner mit einen ( ' ) anfangen darf.
Ich denke auch das "data" ein var sein müsste, denn du willst doch doch immer wieder Daten in deiner while Schleife rein schreiben.
Ok ‚is‘ geht, Kotlin akzeptier auch dieses Zeichen für Bezeichner.
Auch sollte das mit dem val bei data ok sein denn es ist ja ein Objekt (Klasse Instanz).
Aber mit den this bei val `is` = ByteArrayInputStream(this.toByteArray(Charsets.UTF_8))
bin ich nicht ganz ein verstanden.
Ich denke du hast keine Member Funktion mit dem Namen die einen Buffer zrückgibt.
Du willst doch einen Buffer in ein Zip Objekt haben oder? Wo ist dein Buffer den ByteArrayInputStream haben will?
du brauchst einen Buffer, String … den du übergiebst und mit toBytArray zu einen ByteArray machst.
var buf = "hallo"
val `is` = ByteArrayInputStream(buf.toByteArray(Charsets.UTF_8)) zB.
oder wie in den Java teil übergebe gleich den Buffer der bei dier wohl gzippedByteArray heißt.
val `is` = ByteArrayInputStream(gzippedByteArray)
val `is` = ByteArrayInputStream(gzippedByteArray.toByteArray(Charsets.UTF_8))
Die Syntax ist wirklich Gewöhnungsbedürftig muss da auch immer erst dreimal um die Ecke Denken.
Hoffe das Hilft weiter.