我正在尝试执行此命令并得到:
W/System.err: at com.app.activities.navigation.NetworkUtilities.lambda$executeSocketCommand$0(NetworkUtilities.java:101)
2021-03-21 15:44:29.984 16020-16059/? W/System.err: at com.app.activities.navigation.-$$Lambda$NetworkUtilities$yjKxTHWiGKfBSYryXqe0GwJPlNE.run(Unknown Source:4)
产生错误的方法是:
private boolean executeSocketCommand(){
try{
Socket socket = new Socket();
SocketAddress socketAddress = new InetSocketAddress("8.8.8.8", 53);
executor.execute(()->{
try {
socket.connect(socketAddress, 1000); //THIS IS LINE 101
} catch (IOException e) {
e.printStackTrace();
}
});
socket.close();
return true;
}catch(IOException e){
return false;
}
}
在我进行任何网络调用之前的数据连接检查期间调用该方法。
@RequiresApi(api = Build.VERSION_CODES.O)
public boolean isInternetAvailable(Context context) {
boolean connectedToNetwork = false;
boolean connectedToInternet = false;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if(activeNetwork!=null){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
connectedToNetwork = capabilities != null && (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
} else if(connectivityManager!=null){
if (activeNetwork != null) {
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
connectedToNetwork = true;
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
connectedToNetwork = true;
if(connectedToNetwork){
connectedToInternet = executeSocketCommand();
}
}
}
}
}
return connectedToInternet;
}
我认为这是关闭套接字的问题,但实际错误是什么以及如何解决?