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 raten.
Der sollte den main Thread nicht anhalten.
 

Oben