Как решить проблему с сетью при разработке приложения для Android, которое сильно зависит от Интернета - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь разработать приложение для Android для социальных сетей.

Имеет много действий, фрагментов-адаптеров и многое другое

Я не хочу проверять интернет из NetworkManager в каждом из них Everytime

Я хочу, чтобы я мог легко и просто реализовать сетевые случаи с ошибками

Я проверил, как использовать Network Manager для получения состояния сети, и он подключен к Интернету или нет.

Я также проверил широковещательный приемник, и он более полезен, чем Network Manager, и близко соответствует тому, что я себе представляю.

Есть ли лучший способ решить эту проблему. Также, как мы можем справиться с проблемой медленной связи.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Если вы используете OkHttpClient, вы можете использовать перехватчик.

Определите http-клиент таким образом, используя его перехватчик, который выбрасывает NoInternetException

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        httpClient.connectTimeout(HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS);
        httpClient.readTimeout(HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS);
        httpClient.writeTimeout(HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS);
        httpClient.addInterceptor(new Interceptor() {

            @Override
            public okhttp3.Response intercept (@NonNull Chain chain) throws
            NoInternetException, InterceptorException
            {

                if (!Util.isNetworkAvailable(mContext)) {
                    throw new NoInternetException();
                }
            }
        });

С помощью этой вспомогательной функции вы можете определить, доступна ли сеть:

  public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = null;
        if (connectivityManager != null) {
            activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        }
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

Дайте мне знать, если это поможет;)

0 голосов
/ 15 сентября 2018

Вы должны обрабатывать сетевой процесс в фоновом потоке. Есть несколько вариантов:

Asynctask: https://developer.android.com/reference/android/os/AsyncTask

или вы можете использовать RxJava, но это немного сложнее

...