Get/Post als eigener Thread mit Rückgabe

Fohnbit

Top Contributor
Hallo,

ich nutze Apache Http Client für HTTP Get und Post.
Klappt auch soweit.

Jedoch wenn er in einem Timeout läuft, blockiert meine Klasse weil er auf die Rückgabe wartet.

Wie löst man das am einfachsten?
Eine eigene Klasse für das senden ist klar.

Aber es nutzen ca. 20 Methoden die Klasse mit unterschiedlichen URL`s und wie gebe ich dann der richtigen Methode den richtigen Wert zurück?

Danke!
 

Tarrew

Top Contributor
Poste mal bitte den Source Code, dann kann man leichter nachvollziehen was das genaue Problem ist.
Vermutlich willst du mit Future Objekten arbeiten?!
 

Thallius

Top Contributor
Wieviele Methoden eine Klasse benutzen ist ja total schnuppe. Wichtig ist, dass jede Methode ihre eigene Instanz der Klasse benutzt. Damit ist auch klar welche Methode benachrichtigt werden muss wenn der Transfer komplett ist.
 

Fohnbit

Top Contributor
Guten Morgen,

ich habe 2 Methoden:
Java:
@SuppressWarnings("resource")
    private StringBuffer httpGet(String path, String command) {
        StringBuffer result = new StringBuffer();

        try {
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(1 * 1000).build();
            HttpClient httpClient = HttpClientBuilder.create()
                    .setDefaultRequestConfig(requestConfig).build();
            String url = "http://" + inetAddress.getHostAddress() + ":" + port
                    + "/" + path + "?"
                    + MyUrlEncode.URLencoding(command, "ISO-8859-1");
            HttpGet getRequest = new HttpGet(url);
            getRequest.addHeader("accept", "application/json");

            HttpResponse response = httpClient.execute(getRequest);

            if (response.getStatusLine().getStatusCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatusLine().getStatusCode());
            }

            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));

            String line = "";
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }

            return result;

        } catch (ClientProtocolException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();
        }
        return result;

    }

    private StringBuffer httpPost(String path, String command,
            ArrayList<BasicNameValuePair> parameter)
            throws ClientProtocolException, IOException {
        String url = "http://" + inetAddress.getHostAddress() + ":" + port
                + "/" + path + "?"
                + MyUrlEncode.URLencoding(command, "ISO-8859-1");

        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(1 * 1000).build();
        HttpClient httpClient = HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig).build();

        HttpPost post = new HttpPost(url);
        // post.setHeader("User-Agent", USER_AGENT);
        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        for (BasicNameValuePair param : parameter) {
            urlParameters.add(param);
        }

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = httpClient.execute(post);
        System.out.println("Response Code : "
                + response.getStatusLine().getStatusCode());

        BufferedReader rd = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        return result;
    }

Dann habe ich einige Methoden, die über diese http get und post senden:

Java:
    public void onPlay() {
        System.out.println(httpGet("command", commandRef.Play()));
   
    }


    public void onStop() {
        System.out.println(httpGet("command", commandRef.Stop()));
   
    }
... usw

Nun soll der get/post befehl über einen eigenen Thread abgesetzt werden, damit meine Main Klasse nicht blockiert. Jede Methode, die get/post nutzt bekommt das Ergebnis zurück und soll weiter verarbeitet werden (noch nicht integriert. Nur System.out.println() momentan).

Wie bekomme ich get/post in einen eigenen thread welcher das Ergebnis wieder zur richtigen Methode zurückliefert?

Danke!
 

Thallius

Top Contributor
Du erzeugst dir eine Klasse in der alle Methoden enthalten sind die mit dem http request zu tun haben. Dann erzeugst du überall wo du einen http request brauchst eine eigene Instanz dieser Klasse. Deshalb wurde das OOP ja erfunden. Das nennt sich Kapselung.
 

Fohnbit

Top Contributor
Ok, danke!

Ich habe nun eine inner Class erstellt:
Java:
class HttpPostThread implements Runnable {

        public String path = "";
        String command = "";
        ArrayList<BasicNameValuePair> parameter;

        public HttpPostThread(String path, String command,
                ArrayList<BasicNameValuePair> parameter) {
            this.path = path;
            this.command = command;
            this.parameter = parameter;
        }

        public void run() {

Spricht etwas gegen einer inner Class?
Ich muss nämlich auf Objekte der Main Klasse vom Thread aus zurück liefern.

Danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F POST-Request mit json - Abfrage mit Java Java Basics - Anfänger-Themen 2
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
B Input/Output HttpURLConnection ( java.net ) Post request Java Basics - Anfänger-Themen 8
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
X Kann man post increment "vollständig schreiben"? Java Basics - Anfänger-Themen 13
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
A ein observer "post"problem Java Basics - Anfänger-Themen 3
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
J Html zugriff - POST Request/Response Java Basics - Anfänger-Themen 4
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
C Versandmarken Post Java Basics - Anfänger-Themen 3
N URLConnection Post Login Java Basics - Anfänger-Themen 8
P Java POST an PHP und lesen Java Basics - Anfänger-Themen 5
G Daten per post Java Basics - Anfänger-Themen 3
hdi Verständnisfrage zu Zuweisung + Post-Inkrement Java Basics - Anfänger-Themen 3
C HTTP POST-Request Java Basics - Anfänger-Themen 3
R von Applet zu html/php und post variablen mitschicken Java Basics - Anfänger-Themen 3
G POST-Daten Java Basics - Anfänger-Themen 5
hdi post/pre inkrement oder dekrement Java Basics - Anfänger-Themen 4
G Post-und Präinkrement Schreibweise Java Basics - Anfänger-Themen 4
V Post-Methode und HTTPClient ? Java Basics - Anfänger-Themen 3
O Post senden an php script. Java Basics - Anfänger-Themen 20
G Post-Methode senden Java Basics - Anfänger-Themen 4
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
D importieren eigener Klassen Java Basics - Anfänger-Themen 12
W Dez-->Binär mit eigener bit Anzahl Erkennung. Java Basics - Anfänger-Themen 3
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
B Eigener Validierungseditor? Java Basics - Anfänger-Themen 3
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
Bluedaishi Jar mit eigener JRE Java Basics - Anfänger-Themen 7
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
J Threads Problem mit eigener ArrayList Java Basics - Anfänger-Themen 2
E MCLauncher eigener Client workt nicht? Java Basics - Anfänger-Themen 4
A Input/Output Datenströme schließen in eigener Methode Java Basics - Anfänger-Themen 5
J Interface ActionListener in eigener Klasse Java Basics - Anfänger-Themen 27
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
E Compare-Funktion bei eigener Klasse Java Basics - Anfänger-Themen 4
Q ArrayList mit eigener Klasse in Java sotieren Java Basics - Anfänger-Themen 2
N BierSpiel von "Kopf bis Fuss" eigener Code...kleine Problemstellung. Java Basics - Anfänger-Themen 11
C OOP Erstellen eigener Objekte die es schon gibt "schlau"? Java Basics - Anfänger-Themen 3
V Arrays aus eigener Klasse erstellt, zuweisung aber spuckt Fehler in verbindung mit main Methode aus. Java Basics - Anfänger-Themen 3
L Eigener FilterReader Java Basics - Anfänger-Themen 12
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
M import von eigener Klasse Java Basics - Anfänger-Themen 12
P ArrayList aus eigener Klasse "überschreibt" Werte nicht Java Basics - Anfänger-Themen 4
M xPos und yPos eigener Klassen geben lassen Java Basics - Anfänger-Themen 3
H Exit Befehl in eigener Konsole Java Basics - Anfänger-Themen 9
S Eigener InputStream, Hilfe bei read-Methode Java Basics - Anfänger-Themen 6
S Überladener Konstruktor und aufruf aus eigener Klasse Java Basics - Anfänger-Themen 2
D Klassen Problem mit Eigener Array-Klasse Java Basics - Anfänger-Themen 10
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
B Datentypen Probleme mit eigenem Get() bei eigener HashMap Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
G Datentypen "Liste" eigener Objekte durchsuchen Java Basics - Anfänger-Themen 6
S mit eigener Klasse JTextField ändern Java Basics - Anfänger-Themen 3
N Vektor mit eigener Datenstruktur sortieren Java Basics - Anfänger-Themen 20
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
B Ordner öffnen (eigener Dateibrowser) Java Basics - Anfänger-Themen 8
B Eigener Webserver + Eigener Webbrowser Java Basics - Anfänger-Themen 7
I eigener "Abstandshalter" vs. LayoutManager Java Basics - Anfänger-Themen 6
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
D Container mit eigener Klasse Java Basics - Anfänger-Themen 5
B Verwenden eigener Object-Klassen Java Basics - Anfänger-Themen 9
H Eigener Button Java Basics - Anfänger-Themen 2
M Eigener Iterator für LinkedList Java Basics - Anfänger-Themen 20
I Java eigener MSN Messenger schreiben Java Basics - Anfänger-Themen 3
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
G Fortlaufende Aktualisierung bei eigener Klasse Java Basics - Anfänger-Themen 2
G IOException Problem in eigener Klasse Java Basics - Anfänger-Themen 8
B Import Problem mit eigener Klasse. Java Basics - Anfänger-Themen 8
G Eigener Parser Java Basics - Anfänger-Themen 4
T Problem mit eigener Klasse Java Basics - Anfänger-Themen 7
A eigener Explorer via Java? Java Basics - Anfänger-Themen 9
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
T Öffnen externer Datei als eigener Prozess Java Basics - Anfänger-Themen 8
G Datei aus eigener JAR-Datei verwende Java Basics - Anfänger-Themen 2
N Porblem mit dem Importieren eigener Pakete Java Basics - Anfänger-Themen 4
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 10
T ActionListener in eigener Klasse Java Basics - Anfänger-Themen 5
L ActionListener in eigener Klasse Java Basics - Anfänger-Themen 3
T Erstellen eigener packages Java Basics - Anfänger-Themen 6
G JMenuBar in eigener Klasse erstellen Java Basics - Anfänger-Themen 3
A Eigener Datentyp? Java Basics - Anfänger-Themen 39
F Eigener IP-Paket-Header Java Basics - Anfänger-Themen 15
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben