我在助手类中创建了一个函数。
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
。但为什么?!
答案 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;
}