- Forum-Beiträge: 9
11.03.2021, 16:08:44 via Website
11.03.2021 16:08:44 via Website
Hi Leute,
Ich hab ein Problem mit dem Android TCP Socket. Und zwar wenn ich die Void akt() zum ersten mal ausführe funktioniert alles super. Jedoch sobald die Void akt() ein weiteres mal ausführe bleibt er in der "do while" Schleife hängen.
public class Bildschirm extends AppCompatActivity {
Button but1,but2;
ListView list1;
String bestellungen[] = new String[0];
String tischnummern[] = new String[0];
int id[] = new int[0];
boolean fertig = false;
String rueck = "-1";
Thread th = new Thread();
CustomAdapter customAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bildschirm);
th = new Thread();
but1 = (Button) findViewById(R.id.bildbut1);
but2 = (Button) findViewById(R.id.bildbut2);
list1 = (ListView) findViewById(R.id.bildlist1);
but2.setText(Sprache.Aktualisieren[Variablen.Sprache]);
akt();
}
public void akt ()
{
rueck = "-1";
fertig = false;
boolean test = false;
String sende = "";
for(int i = 0;i<ausge.length;i++)
{
if(ausge[i] == true)
{
sende = sende + "%" + i + "=1";
}else
{
sende = sende + "%" + i + "=0";
}
}
th = new Thread (new Thread1(sende));
th.start();
/* Fehler !
while (fertig == false)
{
}
*/
do {
test = fertig;
}while (test == false);
if(rueck.equals("!"))
{
bestellungen = new String[0];
tischnummern = new String[0];
id = new int[0];
}else {
String Daten[] = rueck.split("%");
bestellungen = new String[Daten.length];
tischnummern = new String[Daten.length];
id = new int[Daten.length];
for (int i = 0; i < Daten.length; i++) {
String werte[] = Daten[i].split("/");
if (werte.length == 3) {
bestellungen[i] = werte[0];
tischnummern[i] = werte[1];
id[i] = Integer.parseInt(werte[2]);
}
}
}
customAdapter = null;
customAdapter = new CustomAdapter(getApplicationContext(),bestellungen,tischnummern);
list1.setAdapter(customAdapter);
}
public void Aktualisieren (View view)
{
akt();
}
private PrintWriter output;
private BufferedReader input;
class Thread1 implements Runnable {
private String message;
Thread1(String message) {
this.message = message;
}
@Override
public void run() {
Socket socket;
fertig = false;
try {
rueck = "-1";
socket = new Socket(Variablen.IP, Variablen.PORT);
output = new PrintWriter(socket.getOutputStream());
output.write(message);
output.flush();
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
rueck = input.readLine();
fertig = true;
input.close();
output.close();
/*
runOnUiThread(new Runnable() {
@Override
public void run() {
//etMessage.setText("");
}
});
*/
socket.close();
} catch (IOException e) {
fertig = true;
e.printStackTrace();
}
}
}
}
Ich hab schon verschiedenes Probiert jedoch ohne Erfolg. Die "do while" Schleife benötige ich um so lange zu warten bis ich einen Rückgabewert vom Server erhalten habe.
Zur Info: Beim zweiten Aufruf sendet er alles richtig an den Server und der Server sendet auch eine Richtige Antwort an den Android Client.
Ich danke schon jetzt für hilfreiche Antworten.
Gruß Tobias
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.