Wie realisiere ich einen httpURLConnection Request ?

  • 15 Antworten
  • Letztes Antwortdatum
Status
Dieses Thema wurde gelöst! Zur Lösung springen…
L

lonnie9020

Neues Mitglied
2
Hallo,

bin neu hier und habe schon eine Frage. Ich entwickle noch nicht so lange mit Android Apps und möchte nun gerne Daten mithilfe einer Request von einer Website abfragen. Habe etliche Beispiele online gefunden und auch viel ausprobiert aber bei mir hat immer etwas nicht funktioniert. Vielleicht kann mir irgendwer ja einen Beispielcode schicken der bei ihm funktioniert hat, den ich dann ausprobieren könnte. Vielen Dank schon mal.

VG
lonnie9020
 
Empfohlene Antwort(en)
.. kann ich nur beipflichten :
Code:
implementation("com.squareup.okhttp3:okhttp:4.9.2")
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lonnie9020
Hier schnell etwas als Copy & Paste

Code:
   String url = "www.whateverurl.com"

   OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .writeTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS).build();
        okhttp3.Request request;

        request = new okhttp3.Request.Builder().url(url).method("GET", null).build();
        client.newCall(request).enqueue(new Callback()
        {
            public void onFailure(Call call, IOException e)
            {
                try
                {
                } catch (Exception ll) {}
            }
            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException
            {
                if (response.isSuccessful())
                {
                    try {
                        String in =response.body().string();

                    } catch (Exception lm) {Log.d(TAG,"Das ging daneben: " + lm.toString());}
                }
                else
                {
                
                }

            }
        });
 
Zuletzt bearbeitet:
Alle Antworten (15)
Für so etwas verwende ich immer die OKHTTP Library und brauche mir über die Hintergründe keine Gedanken zu machen. Beispielcode gibt es hier: OkHttp Get Request Java Example.

Viele Grüße
 
  • Danke
Reaktionen: swa00
.. kann ich nur beipflichten :
Code:
implementation("com.squareup.okhttp3:okhttp:4.9.2")
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lonnie9020
Hi vielen vielen Dank für die schnelle Antwort. Probiere das direkt Mal aus und schreibe euch gleich ob es geklappt hat.
 
  • Danke
Reaktionen: swa00
Hier schnell etwas als Copy & Paste

Code:
   String url = "www.whateverurl.com"

   OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .writeTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS).build();
        okhttp3.Request request;

        request = new okhttp3.Request.Builder().url(url).method("GET", null).build();
        client.newCall(request).enqueue(new Callback()
        {
            public void onFailure(Call call, IOException e)
            {
                try
                {
                } catch (Exception ll) {}
            }
            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException
            {
                if (response.isSuccessful())
                {
                    try {
                        String in =response.body().string();

                    } catch (Exception lm) {Log.d(TAG,"Das ging daneben: " + lm.toString());}
                }
                else
                {
                
                }

            }
        });
 
Zuletzt bearbeitet:
Hallo,

Android Studio zeigt mir leider schon beim importieren in der Java Datei Fehler an.
Bild_2022-10-15_104454856.png Bild_2022-10-15_104447318.png
Anbei Screenshots und hier der Code:

build.gradle ( :app ):
Code:
plugins {
    id 'com.android.application'
}

android {
    namespace 'de.lnetwork.lmanagement'
    compileSdk 32

    defaultConfig {
        applicationId "de.lnetwork.lmanagement"
        minSdk 22
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}



dependencies {
    implementation "com.squareup.okhttp3 : okhttp:4.9.2"
    implementation 'com.google.android.gms:play-services-cronet:18.0.1'
    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'org.chromium.net:cronet-api:105.5195.68'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

Startseite.java:

Java:
package de.lnetwork.lmanagement;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.EventListener;
[B]import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;[/B]


public class Startseite extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startseite);
        String email = getIntent().getExtras().getString("email");
        String password = getIntent().getExtras().getString("password");
        final Button buttonMenuStartseite = findViewById(R.id.buttonMenuStartseite);
        final TextView textViewTestForRequest = findViewById(R.id.textViewTestForRequest);
        buttonMenuStartseite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                test();
            }
        });
    }
    public void test() {
        URL url = null;
        try {
            url = new URL("http://www.android.com/");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }
    private String readStream(InputStream is) {
        try {
            ByteArrayOutputStream bo = new ByteArrayOutputStream();
            int i = is.read();
            while(i != -1) {
                bo.write(i);
                i = is.read();
            }
            return bo.toString();
        } catch (IOException e) {
            return "";
        }
    }

    public static String convertStreamToString(InputStream is) throws Exception {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        return sb.toString();
    }
}

Weiß irgendwer woran das liegen könnte?
 
Bitte auch ALLE & GENAU die Beiträge lesen , nicht direkt hastig loslegen :)

Deine Implemenation = #3
 
Zuletzt bearbeitet:
Ich kaue dir bewusst nichts vor - schau Dir selbst mal deinen Post #6 an und vergleiche mit #3
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lonnie9020
@swa00 Ich habs geändert und probiere es nun aus.
Beiträge automatisch zusammengeführt:

Ok. Das importieren hat geklappt und mir wird da keine Fehlermeldung angezeigt. Wie muss ich jetzt weiter vorgehen?
 
Zuletzt bearbeitet:
Post #5 ?
 
Den hab ich schon versucht. Aber entweder hab ich es an den falschen Ort kopiert oder der Code funktioniert nicht. Ich gucke mir gerade die Doku von Okhttp an und probiere das aus.
 
Grundsätzliches :

Aber entweder hab ich es an den falschen Ort kopiert oder der Code funktioniert nicht.

Du hast in Deinem Eingangspost nach einem guten Stein für deine Mauer gefragt.
Diese Antwort hast du auch erhalten incl. wie man ihn denn auch verwendet.

Leider stellt sich allerdings heraus, dass du nicht weist , wie man ansich mauert und das kann Dir ein Forum nicht bieten.
Dir fehlt es an Java und OOP Grundlagen (Maurergeselle) , die essentiell für die Umsetzung eines Codes (der Mauer) sind.

Dein ursprünglicher Code konnte z.b. niemals funktionieren , da du das Wesentliche nicht berücksichtigt hast , dass ein Request grundsätzlich separiert vom UI Thread in einem eigenen Thread arbeiten muss.

Hier unser Leitfaden zu den Grundlagen (neben dem ausführlichen Studieren der API Dokumentation von Google)
[LEITFADEN] Der Einstieg in die Android Programmierung mit Android Studio
 
Zuletzt bearbeitet:
Hallo,

ich hab es nun geschafft. Mithilfe des Codes aus Post #5 von swa00 und der Hilfe von swa00 zur implementierung hat es nun geklappt. Meine Implementierung Fehler habe ich rot gefärbt (da war vorher der Fehler) und den ein winziges bisschen abgeänderten Code aus Post #5 habe ich grün gefärbt.

Java:
package de.lnetwork.lmanagement;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;


public class Startseite extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_startseite);
        String email = getIntent().getExtras().getString("email");
        String password = getIntent().getExtras().getString("password");
        final Button buttonMenuStartseite = findViewById(R.id.buttonMenuStartseite);
        final TextView textViewTestForRequest = findViewById(R.id.textViewTestForRequest);
        buttonMenuStartseite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                test();
            }
        });
    }

    public void test() {
        final TextView textViewTestForRequest = findViewById(R.id.textViewTestForRequest);
        [COLOR=rgb(97, 189, 109)]String url = "http://raspberrypi:3000/users";
        String antwort = "";

        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(5, TimeUnit.SECONDS)
                .writeTimeout(5, TimeUnit.SECONDS)
                .readTimeout(5, TimeUnit.SECONDS).build();
        okhttp3.Request request;

        request = new okhttp3.Request.Builder().url(url).method("GET", null).build();
        client.newCall(request).enqueue(new Callback()
        {
            public void onFailure(Call call, IOException e)
            {
                try
                {
                } catch (Exception ll) {}
            }
            @Override
            public void onResponse(Call call, okhttp3.Response response) throws IOException
            {
                if (response.isSuccessful())
                {
                    String in = response.body().string();
                    textViewTestForRequest.setText(in);
                }
            }
        });

    }[/COLOR]
}

Code:
plugins {
    id 'com.android.application'
}

android {
    namespace 'de.lnetwork.lmanagement'
    compileSdk 32

    defaultConfig {
        applicationId "de.lnetwork.lmanagement"
        minSdk 22
        targetSdk 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}



dependencies {
    implementation("com.squareup.okhttp3:okhttp:4.9.2")
    implementation 'com.google.android.gms:play-services-cronet:18.0.1'
    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'org.chromium.net:cronet-api:105.5195.68'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}


Vielen Dank an alle die hier etwas reingeschrieben haben und insbesondere Vielen Dank an swa00!
 
  • Danke
Reaktionen: swa00
herzlichen Glückwunsch !! :)
 
Code:
implementation("com.squareup.okhttp3:okhttp:4.9.2")



Benutze mal wie üblich die einfachen Hochkommas.

Code:
implementation 'com.squareup.okhttp3:okhttp:4.9.2'
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung springen…

Ähnliche Themen

F
Antworten
5
Aufrufe
484
swa00
swa00
S
  • skywalker22
2
Antworten
27
Aufrufe
471
swa00
swa00
S
Antworten
7
Aufrufe
275
Silvasurf
S
Zurück
Oben Unten