Теперь ваше приложение работает всякий раз, когда устройство подключено к inte rnet, но оно падает, когда inte rnet недоступно.
Итак, вы хотите проверить, подключено ли вы на inte rnet, а если нет, то вы хотите запретить любой код, который пытается проанализировать любой URL.
Чтобы проверить, подключено ли ваше устройство к inte rnet или нет, используйте метод ниже, который возвращает true
, если ваше устройство подключено к inte rnet.
public boolean isOnline(Context context) {
boolean isConnected = false;
ConnectivityManager mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
// Checking internet connectivity
NetworkInfo activeNetwork = null;
if (mConnectivityMgr != null) {
activeNetwork = mConnectivityMgr.getActiveNetworkInfo(); // Deprecated in API 29
}
isConnected = activeNetwork != null;
} else {
Network[] allNetworks = mConnectivityMgr.getAllNetworks(); // added in API 21 (Lollipop)
for (Network network : allNetworks) {
NetworkCapabilities networkCapabilities = mConnectivityMgr.getNetworkCapabilities(network);
if (networkCapabilities != null) {
if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
|| networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET))
isConnected = true;
}
}
}
return isConnected;
}
Добавьте isOnline()
метод в свой класс адаптера, который называется CustomGridView
.
В вашем коде вы пытаетесь получить доступ к inte rnet в вашем адаптере, в частности, в методе getView()
, используя свой собственный класс AsyncTask
. Поэтому измените этот метод, чтобы проверить, подключены ли вы к сети.
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View r = convertView;
ViewHolder viewHolder = null;
if (r == null) {
LayoutInflater layoutInflater = context.getLayoutInflater();
r = layoutInflater.inflate(R.layout.item_home_grid_users, null, true);
viewHolder = new ViewHolder(r);
r.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) r.getTag();
}
viewHolder.tvw1.setText(profilename[position]);
if (isOnline(parent.getContext())) {
new GetImageFromURL(viewHolder.ivw).execute(imagepath[position]);
new GetImageFromURLStatus(viewHolder.ImgStatusOnlineOffline).execute(ImgUserStatus[position]);
}
return r;
}
проверьте этот ответ , если хотите больше узнать о функциональности inte rnet.