Skip to content

android.os.NetworkOnMainThreadException #3

@kaifeichen

Description

@kaifeichen

The socket operation in BosswaveClient constructor causes

android.os.NetworkOnMainThreadException

when called in Android main thread.

Should the socket be moved to another thread (like the beginning of the listener thread?)? Or should application developer avoid creating BosswaveClient in the main thread?

Android log:

D/libc-netbsd: [getaddrinfo]: hostname=xxxxx; servname=(null); cache_mode=(null), netid=0; mark=0
D/libc-netbsd: [getaddrinfo]: ai_addrlen=0; ai_canonname=xxxxx; ai_flags=4; ai_family=0
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: edu.berkeley.cs.sdb.cellmate, PID: 9339
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.berkeley.cs.sdb.cellmate/edu.berkeley.cs.sdb.cellmate.MainActivity}: android.os.NetworkOnMainThreadException
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
                      at android.app.ActivityThread.access$800(ActivityThread.java:155)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5376)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
                   Caused by: android.os.NetworkOnMainThreadException
                      at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
                      at java.net.InetAddress.lookupHostByName(InetAddress.java:426)
                      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:255)
                      at java.net.InetAddress.getAllByName(InetAddress.java:218)
                      at java.net.Socket.tryAllAddresses(Socket.java:111)
                      at java.net.Socket.<init>(Socket.java:180)
                      at java.net.Socket.<init>(Socket.java:152)
                      at edu.berkeley.cs.sdb.bosswave.BosswaveClient.<init>(BosswaveClient.java:50)
                      at edu.berkeley.cs.sdb.cellmate.MainActivity.initBosswaveClient(MainActivity.java:482)
                      at edu.berkeley.cs.sdb.cellmate.MainActivity.onCreate(MainActivity.java:419)
                      at android.app.Activity.performCreate(Activity.java:6021)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5376) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

Ref: https://github.com/SoftwareDefinedBuildings/bw2android/blob/master/src/main/java/edu/berkeley/cs/sdb/bosswave/BosswaveClient.java#L50

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions