在开发高度依赖互联网的Android应用时如何处理网络问题

时间:2018-09-15 14:06:59

标签: android android-studio android-fragments android-intent android-activity

我正在尝试开发一个用于社交网络的Android应用程序。

它具有许多活动,片段适配器等等

我不想每次都从NetworkManager中检查互联网

我想要一种可以轻松便捷地实施网络故障案例的方法

我已经检查了如何使用Network Manger来获取网络状态,并且它是否已连接到Internet。

我还检查了广播接收器,它比网络管理器更有用,并且与我的想象接近。

有没有更好的方法来解决此问题。 还有我们该如何处理连接速度慢的问题。

谢谢

2 个答案:

答案 0 :(得分:0)

您应该在后台线程中处理网络进程。有一些选项:

异步任务:https://developer.android.com/reference/android/os/AsyncTask

或者您可以使用RxJava,但是有点困难

答案 1 :(得分:0)

如果使用OkHttpClient,则可以使用拦截器。

使用抛出NoInternetException的拦截器,像这样定义http客户端

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();
    }

让我知道这是否有帮助;)