[Android Studio][okHttp]发送选项请求失败

[Android Studio][okHttp]发送选项请求失败,android,http,request,okhttp,options,Android,Http,Request,Okhttp,Options,我正在尝试使用okHttp库在Android Studio(SDK 19)上执行一个选项请求。 看不到太多关于如何使用此库调用选项请求的示例,所以我查看了文档,这就是我所实现的。 这是我的密码: RequestBody requestBody = RequestBody.create(null, new byte[0]); OkHttpClient client = new OkHttpClient(); URL url = null; try { ur

我正在尝试使用okHttp库在Android Studio(SDK 19)上执行一个选项请求。 看不到太多关于如何使用此库调用选项请求的示例,所以我查看了文档,这就是我所实现的。 这是我的密码:

RequestBody requestBody = RequestBody.create(null, new byte[0]);

    OkHttpClient client = new OkHttpClient();
    URL url = null;
    try {
        url = new URL("SOME_URL");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    Request.Builder formBody = new Request.Builder().url(url).method("OPTIONS", null).header("Content-Length", "0");
    Response response;
    Call call = client.newCall(formBody.build());
    try {
        response = call.execute();
    } catch (IOException e) {
        e.printStackTrace();
    }
应用程序在执行时崩溃,但我不明白为什么。 我猜我的请求有问题

response = call.execute();
这是我的堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fsck.k9.debug/com.fsck.k9.SimpleHttpSend}: android.os.NetworkOnMainThreadException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
 Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
    at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
    at java.net.InetAddress.getAllByName(InetAddress.java:787)
    at com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
    at com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
    at com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
    at com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
    at com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
    at com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:327)
    at com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
    at com.squareup.okhttp.Call.getResponse(Call.java:267)
    at com.squareup.okhttp.Call$ApplicationInterceptorChain.proceed(Call.java:224)
    at com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
    at com.squareup.okhttp.Call.execute(Call.java:79)
    at com.fsck.k9.ActiveSyncClient.OptionsRequest(ActiveSyncClient.java:36)
    at com.fsck.k9.HttpSendVM.<init>(HttpSendVM.java:13)
    at java.lang.Class.newInstance(Native Method)
    at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
    at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
    at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
    at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
    at com.fsck.k9.SimpleHttpSend.onCreate(SimpleHttpSend.java:20)
    at android.app.Activity.performCreate(Activity.java:6975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6541) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
java.lang.RuntimeException:无法启动活动组件信息{com.fsck.k9.debug/com.fsck.k9.SimpleHttpSend}:android.os.NetworkOnMainThreadException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6541)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:240)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
原因:android.os.NetworkOnMainThreadException
在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
位于java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
在java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
位于java.net.InetAddress.getAllByName(InetAddress.java:787)
位于com.squareup.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
位于com.squareup.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
位于com.squareup.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
在com.squareup.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)上
位于com.squareup.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:344)
位于com.squareup.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:327)
位于com.squareup.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:245)
位于com.squareup.okhttp.Call.getResponse(Call.java:267)
在com.squareup.okhttp.Call$ApplicationInterceptorChain.procedure(Call.java:224)
位于com.squareup.okhttp.Call.getResponseWithInterceptorChain(Call.java:195)
在com.squareup.okhttp.Call.execute(Call.java:79)
在com.fsck.k9.ActiveSyncClient.optionRequest(ActiveSyncClient.java:36)上
位于com.fsck.k9.HttpSendVM.(HttpSendVM.java:13)
位于java.lang.Class.newInstance(本机方法)
在androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)中
在androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
在androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
位于androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
位于com.fsck.k9.SimpleHttpSend.onCreate(SimpleHttpSend.java:20)
位于android.app.Activity.performCreate(Activity.java:6975)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6541)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:240)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

错误是android.os.NetworkOnMainThreadException。请参阅stackoverflow中关于此问题的各种答案


问题是有效的,但本质上是重复的。