为什么连接管理器不能在棒棒糖前设备上工作?

时间:2016-06-15 07:48:17

标签: java android android-volley

我在助手类中创建了一个函数。

public class helpers {

    ////////////////////////////////////////////////////////////
    //================== method for checking internet connection  ===========
    ////////////////////////////////////////////////////////////

    public static  boolean isOnline(Context context) {
        ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo netInfo = cm.getActiveNetworkInfo();
        if (netInfo != null && netInfo.isConnectedOrConnecting()) {
            return true;
        }
        return false;
    }
}

在其他类中使用此方法需要在发送带有齐射的json请求之前建立Internet连接。 现在我的问题是为什么这个功能在棒棒糖设备中工作,并且在棒棒糖前设备中不起作用。

例如,请参阅此代码:

private void sendJsonReq() {

        if (helpers.isOnline(DarsActivity.this)) {
            //creating volley object request
            JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, darsUrl, null, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    if (response != null || response.length() > 0) {
                       //doing network stuff
                    }
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    prgLoading.setVisibility(View.GONE);
                    Toast.makeText(DarsActivity.this, "خطا در دریافت اطلاعات ", Toast.LENGTH_SHORT).show();
                }
            });
            AppController.getInstance().addToRequestQueue(request);

            // LOAD MORE FUNCTION =====================================================================

            recyclerView.addOnScrollListener(new EndlessRecyclerViewScrollListener(gridLayoutManager) {
                @Override
                public void onLoadMore(int page, int totalItemsCount) {
                    if (!after_url.equals("null")) {
                        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, after_url, null, new Response.Listener<JSONObject>() {
                            @Override
                            public void onResponse(JSONObject response) {
                               //doing network stuff
                            }
                        }, new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {

                                prgLoading.setVisibility(View.GONE);
                                errorLayout.setVisibility(View.VISIBLE);
                                txtErrorMessage.setText("دریافت اطلاعات با مشکل مواجه شد دوباره امتحان کنید !");
                                btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        if (helpers.isOnline(DarsActivity.this)) {
                                            prgLoading.setVisibility(View.VISIBLE);
                                            errorLayout.setVisibility(View.GONE);
                                            sendJsonReq();
                                        } else {
                                            errorLayout.setVisibility(View.VISIBLE);
                                            prgLoading.setVisibility(View.GONE);
                                            txtErrorMessage.setText("شما به اینترنت متصل نیستید . دوباره امتحان کنید !");
                                            btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                                                @Override
                                                public void onClick(View v) {
                                                    if (helpers.isOnline(DarsActivity.this)) {
                                                        errorLayout.setVisibility(View.GONE);
                                                        prgLoading.setVisibility(View.VISIBLE);
                                                        sendJsonReq();
                                                    }
                                                }
                                            });
                                        }
                                    }
                                });

                            }
                        });
                        AppController.getInstance().addToRequestQueue(request);

                    }
                }
            });
        } else {
            errorLayout.setVisibility(View.VISIBLE);
            btnErrorRefresh.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (helpers.isOnline(DarsActivity.this)) {
                        errorLayout.setVisibility(View.GONE);
                        prgLoading.setVisibility(View.VISIBLE);
                        sendJsonReq();
                    }
                }
            });
        }
    }

当我在棒棒糖设备上运行此代码时,错误处理工作完美,但是当我在棒棒糖前设备上运行它时,它会跳过isOnline方法并发送json请求。

编辑:

跟踪代码后,我在pre-lollipop设备中获得isOnline方法返回true。但为什么?!

2 个答案:

答案 0 :(得分:0)

试试这个效果很好:

 public boolean isConnectingToInternet() {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {

                    return true;
                }

    }
    return false;
}

答案 1 :(得分:0)

使用以下代码在所有设备中使用。

public static boolean isConnected(Context context) {
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null) {
        NetworkInfo info = connectivity.getActiveNetworkInfo();
        if (info != null) {

            if (info.getType() == ConnectivityManager.TYPE_WIFI || info.getType() == ConnectivityManager.TYPE_MOBILE || info.getType() == ConnectivityManager.TYPE_ETHERNET) {
                return true;
            }
        }
    }
    return false;
}