来自Android的Web服务调用失败

问题描述 投票:0回答:1

是Android开发中的新功能。尝试在Android Studio中调用Web服务并获取以下消息:java.net.SocketTimeoutException:SSL握手超时。我看不到Wireshark的流量,也不确定它在哪一点失败。似乎没有离开模拟器。

编辑:由于缺少更好的术语,Web服务包含三种方法。我不确定如何在android中调用适当的方法。在powershell中,我这样称呼:

Powershell:

$myname = New-WebServiceProxy -Uri $URI -Namespace myname-class ssl
$myname.webservicemethod($qualifications,0,30)

Android:

public class MainActivity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button2);
        final TextView textview = findViewById(R.id.textView);

         button.setOnClickListener(new View.OnClickListener()
         {
            @Override
            public void onClick(View v)
            {
                AsyncTask asyncTask = new AsyncTask()
                {
                    @Override
                    protected Object doInBackground(Object[] objects)
                    {
                        OkHttpClient client = new OkHttpClient();

                        HttpUrl.Builder urlBuilder = HttpUrl.parse("https://ip of webservice/pathvalue/WSDL/public/hostname/name").newBuilder();
                    urlBuilder.addQueryParameter("username", "someuser");
                    urlBuilder.addQueryParameter("password", "somepass");
                    urlBuilder.addQueryParameter("qualification", "Assigned Group=Admin Group");
                    String url = urlBuilder.build().toString();

                    Request request = new Request.Builder().url(url).build();
                    Response response = null;
                    try
                    {
                        response = client.newCall(request).execute();
                        return response.body().string();
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
 return null;
                }

                @Override
                protected void onPostExecute(Object o)
                {
                    textview.setText(o.toString());

                }
            }.execute();
        }
        });
    }
}
android okhttp
1个回答
0
投票

我怀疑阻止SocketTimeoutException超出了我们的限制。有效处理它的一种方法是定义连接超时,然后使用try catch块处理它。希望这会有所帮助

HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000); //set the timeout in milliseconds
© www.soinside.com 2019 - 2024. All rights reserved.