android - 重新连接到互联网时显示进度条

标签 android android-alertdialog android-progressbar

当没有互联网时,会出现一个带有取消重试按钮的警告对话框,在重试按钮上我递归调用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/

相关文章:

android - 屏幕锁定时 MediaPlayer 有时不准备

android - 如何等待代码在 Android 中执行? Runnable 对我来说失败了

android mapview交通信息

dart - Flutter如何将容器背景设置为透明色

android - 从 fragment 对话框中显示 fragment

android - 如何在 Android 的异步类中显示 FTP 下载的进度条?

java - 使用 Asynctask 在 Android 中显示 ProgressBar

android - 显示进度条出错

android - ARToolkit 中的虚拟按钮