当没有互联网时,会出现一个带有取消和重试按钮的警告对话框,在重试按钮上我递归调用newsResponse() 方法。
现在我想要的是,在重试时它应该显示进度对话框(意味着延迟 5 秒),当没有互联网时再次显示警报对话框。 p>
我的代码。
public void newsResponse() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String str_response = response.toString();
News news = gson.fromJson(str_response, News.class);
news_list = news.getArticles();
newsListAdapter = new NewsListAdapter(NewsActivity.this, news_list);
newsGridAdapter = new NewsGridAdapter(NewsActivity.this, news_list);
progressBar.setVisibility(View.GONE);
listRecyclerView.setAdapter(newsListAdapter);
gridRecyclerView.setAdapter(newsGridAdapter);
if (isList) {
listRecyclerView.setVisibility(View.GONE);
} else {
gridRecyclerView.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (!checkInternet()) {
AlertDialog.Builder connectionBuilder = new AlertDialog.Builder(NewsActivity.this);
connectionBuilder.setMessage("Unable to load data!");
connectionBuilder.setCancelable(true);
connectionBuilder.setPositiveButton(
"Retry",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
newsResponse();
}
});
connectionBuilder.setNegativeButton(
"Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
finish();
}
});
AlertDialog alert11 = connectionBuilder.create();
alert11.show();
}
}
});
}
private boolean checkInternet() {
ConnectivityManager cm =
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
return isConnected;
}
最佳答案
为您的进度条添加延迟:
public void newsResponse() {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
String str_response = response.toString();
News news = gson.fromJson(str_response, News.class);
news_list = news.getArticles();
newsListAdapter = new NewsListAdapter(NewsActivity.this, news_list);
newsGridAdapter = new NewsGridAdapter(NewsActivity.this, news_list);
progressBar.setVisibility(View.GONE);
listRecyclerView.setAdapter(newsListAdapter);
gridRecyclerView.setAdapter(newsGridAdapter);
if (isList) {
listRecyclerView.setVisibility(View.GONE);
} else {
gridRecyclerView.setVisibility(View.GONE);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (!checkInternet()) {
AlertDialog.Builder connectionBuilder = new AlertDialog.Builder(NewsActivity.this);
connectionBuilder.setMessage("Unable to load data!");
connectionBuilder.setCancelable(true);
connectionBuilder.setPositiveButton(
"Retry",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
final ProgressDialog pDialog = new ProgressDialog(NewsActivity.this);
pDialog.setMessage("Loading...");
pDialog.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
pDialog.dismiss();
newsResponse();
}
}, 5000);
}
});
connectionBuilder.setNegativeButton(
"Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
finish();
}
});
AlertDialog alert11 = connectionBuilder.create();
alert11.show();
}
}
});
}
private boolean checkInternet() {
ConnectivityManager cm =
(ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
return isConnected;
}
当您按下重试按钮时,它会显示进度对话框 5 秒钟。
关于android - 重新连接到互联网时显示进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258556/