OkHttp Multipart NetworkOnMainThreadException

wer112

Top Contributor
Im letzten Thread wurde mir für größere Dateien okhttp emfohlen.
Ich habe ein Video angesehen und habe es versucht nachzumachen:

Beim Ausführen des App Stores crasht die App.

Fehlermeldung:

Java:
android.os.NetworkOnMainThreadException
                                                                                                        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1668)
                                                                                                        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
                                                                                                        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
                                                                                                        at java.net.InetAddress.getAllByName(InetAddress.java:1152)
                                                                                                        at okhttp3.Dns$Companion$DnsSystem.lookup(Dns.kt:49)
                                                                                                        at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.kt:164)
                                                                                                        at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.kt:129)
                                                                                                        at okhttp3.internal.connection.RouteSelector.next(RouteSelector.kt:71)
                                                                                                        at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:205)
                                                                                                        at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
                                                                                                        at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
                                                                                                        at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
                                                                                                        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
                                                                                                        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
                                                                                                        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
                                                                                                        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
                                                                                                        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
                                                                                                        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
                                                                                                        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
                                                                                                        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
                                                                                                        at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
                                                                                                        at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
                                                                                                        at com.andrealfredklug.klugstore.Konsole.App_spenden$3.onClick(App_spenden.java:272)
                                                                                                        at android.view.View.performClick(View.java:7792)
                                                                                                        at android.widget.TextView.performClick(TextView.java:16112)
                                                                                                        at android.view.View.performClickInternal(View.java:7769)
                                                                                                        at android.view.View.access$3800(View.java:910)
                                                                                                        at android.view.View$PerformClick.run(View.java:30218)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:938)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:226)
                                                                                                        at android.os.Looper.loop(Looper.java:313)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8751)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Der Code:

Java:
OkHttpClient client = new OkHttpClient();

                    File file = new File(path);
                    RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
                            .addFormDataPart("zip", file.getName(), RequestBody.create(MediaType.parse("application/zip"), file))
                            .addFormDataPart("appname", appname)
                            .addFormDataPart("packagename", packagename)
                            .addFormDataPart("version", version)
                            .addFormDataPart("passwort", passwort)
                            .build();

                    okhttp3.Request request = new okhttp3.Request.Builder()
                            .url(url)
                            .post(requestBody)
                            .build();

                    try {
                        okhttp3.Response response = client.newCall(request).execute();
                        Log.e(TAG, "Response: " + response.body().toString());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }

Ist der Code Falsch oder muss ich was ändern, damit ich jede Datei hochladen kann?

Danke für euere Hilfe 👍
 

Jw456

Top Contributor
Die Fehler Meldung sagt dir ja schon was falsch ist. Ab Android 3 oder war es 4 kein Netzwerk Zugriff im Main Thread.

Du benutzt sysnconen execute von okhttp.

Ich würde zum asynconen execute (mit callback) raten.
Der sollte den main Thread nicht anhalten.
 
Zuletzt bearbeitet:

wer112

Top Contributor
Die Fehler Meldung sagt dir ja schon was falsch ist. Ab Android 3 oder war es 4 kein Netzwerk Zugriff im Main Thread.

Du benutzt sysnconen execute von okhttp.

Ich würde zum asynconen execute (mit callback) raten.
Der sollte den main Thread nicht anhalten.
Und wie mache ich das mit dem asynconen?

Ich habe es so probiert:

Java:
 client.newCall(request).enqueue(new Callback() {
                        @Override
                        public void onFailure(@NonNull Call call, @NonNull IOException e) {
                        Log.e(TAG, "onFailure: " + e);
                        aLoadingDialog.dismiss();
                        }

                        @Override
                        public void onResponse(@NonNull Call call, @NonNull okhttp3.Response response) throws IOException {
                        Log.e(TAG, "Response: " + response.body().toString());
                        aLoadingDialog.dismiss();
                        }
                    });

Aber es wird nicht ausgeführt. Bekomme kein Response oder ERROR rein.
Das ALodingDialog dreht sich gefühlt 2 Minuten.

Als ANtwort nach ca. 3 Minuten: Response: okhttp3.internal.http.RealResponseBody@b67efb8

Aber nixs wird hochgeladen noch eine Fehlermeldung angezeigt.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben