是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();
}
});
}
}
我怀疑阻止SocketTimeoutException超出了我们的限制。有效处理它的一种方法是定义连接超时,然后使用try catch块处理它。希望这会有所帮助
HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(7000); //set the timeout in milliseconds