【发布时间】:2018-10-15 10:45:19
【问题描述】:
我在帮助类中创建了一个函数。
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;
}
}
并且在其他类中使用此方法需要在使用 volley 发送 json 请求之前建立互联网连接。 现在我的问题是为什么这个功能在棒棒糖设备中工作而在棒棒糖之前的设备中不起作用。
例如,请参阅此代码:
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 请求。
编辑:
跟踪代码后,我得到了棒棒糖前设备中的 isOnline 方法返回 true。但是为什么?!
【问题讨论】:
-
跳过 isOnline 方法是什么意思?也许它总是返回 true?
-
你是对的,我用调试器检查它。当我在我的棒棒糖(geny 运动设备)中获得 isOnline 的值时,它在我有连接时返回真值,当我没有连接时返回 false,但在我的 android 4 geny 运动设备中它总是返回真,但为什么??? !!!
标签: java android android-volley