Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使用OkHttp3从android应用程序访问webmethod_Java_Android_Web Services_Okhttp3 - Fatal编程技术网

Java 尝试使用OkHttp3从android应用程序访问webmethod

Java 尝试使用OkHttp3从android应用程序访问webmethod,java,android,web-services,okhttp3,Java,Android,Web Services,Okhttp3,我尝试使用以下代码创建webmethod,然后使用OkHttp从android应用程序使用它: Web服务托管于http://someaddress.com/HelloWorld using GLS.GLIS.Core; using System.IO; using GLS.GLIS.ApplicationServices.Settings; namespace GLS.GLIS.Web.Ax { [WebService(Namespace = "http://tempuri.org/"

我尝试使用以下代码创建webmethod,然后使用OkHttp从android应用程序使用它:

Web服务托管于http://someaddress.com/HelloWorld

using GLS.GLIS.Core;
using System.IO;
using GLS.GLIS.ApplicationServices.Settings;

namespace GLS.GLIS.Web.Ax
{

  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
  [System.Web.Script.Services.ScriptService]
  public class Wireless : System.Web.Services.WebService
  {

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
}
以上作品,制作代码

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.whirlpool.ad.na.gruves1.glisweb">

  <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>
    </application>

  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

</manifest>

MainActivity.java

package com.whirlpool.ad.na.gruves1.glisweb;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;


public class MainActivity extends AppCompatActivity {



  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Button HelloWorldbtn = (Button) findViewById(R.id.btn1);

    HelloWorldbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            onHelloWorld(v);
        }
    });
  }



  public void onHelloWorld (View v) {
    OkHttpClient client = new OkHttpClient();

    Request request = new Request.Builder()
            .url("http://<someaddress>.com/HelloWorld")
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Toast toast = Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT);
            toast.show();
        }
    });
  }
}
package com.whirlpool.ad.na.gruves1.glisweb;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.Toast;
导入java.io.IOException;
导入okhttp3.Call;
导入okhttp3.Callback;
导入okhttp3.OkHttpClient;
导入okhttp3.请求;
导入okhttp3.响应;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮HelloWorldbtn=(按钮)findviewbyd(R.id.btn1);
HelloWorldbtn.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
关于地狱世界(五);
}
});
}
HelloWorld上的公共void(视图v){
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder()
.url(“http://.com/HelloWorld")
.build();
client.newCall(request).enqueue(new Callback()){
@凌驾
公共void onFailure(调用调用,IOE异常){
e、 printStackTrace();
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
Toast Toast=Toast.makeText(getApplicationContext(),“Success”,Toast.LENGTH\u SHORT);
toast.show();
}
});
}
}
我们的目标是使用android应用程序访问Web服务HelloWorld和onResponse,为“成功”干杯。我的目标是在未来的迭代中在此基础上构建,并利用更多的Web服务。但是,以下内容不断返回各种错误,当搜索这些错误时,不会返回与我的问题相关的解决方案。目前我能想到的最好的办法是,这可能是一个活动问题。破坏代码并跟踪堆栈跟踪也不会返回任何突出的内容。任何帮助都将不胜感激。提前谢谢

更新

以下是在模拟器中运行时出现的错误:

E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
  Process: glisweb, PID: 2749
  java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
  at android.os.Handler.<init>(Handler.java:200)
  at android.os.Handler.<init>(Handler.java:114)
  at android.widget.Toast$TN.<init>(Toast.java:345)
  at android.widget.Toast.<init>(Toast.java:101)
  at android.widget.Toast.makeText(Toast.java:259)
  at glisweb.MainActivity$2.onResponse(MainActivity.java:54)
  at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135)
  at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
  at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime:致命异常:OkHttp调度程序
流程:glisweb,PID:2749
java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
android.os.Handler.(Handler.java:200)
位于android.os.Handler.(Handler.java:114)
在android.widget.Toast$TN.(Toast.java:345)
在android.widget.Toast.(Toast.java:101)
位于android.widget.Toast.makeText(Toast.java:259)
位于glisweb.MainActivity$2.onResponse(MainActivity.java:54)
在okhttp3.RealCall$AsyncCall.execute(RealCall.java:135)
运行(NamedRunnable.java:32)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
运行(Thread.java:818)

这花费了我大量的实验和摸索,但我最终找到了解决此错误的方法。这个解决方案的要点是,您应该注意在newCall函数中的onFailure和onResponse方法中放入了什么代码。例如:

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        Toast toast = Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT);
        toast.show();
    }
在onResponse中,使用函数toast.show()抛出我看到的特定错误。我相信这与Android使用的视图有关。只需删除此代码,并将其替换为可以在onResponse方法之外引用的变量