【问题标题】:Show progress bar while reconnecting to internet重新连接到互联网时显示进度条
【发布时间】:2019-02-14 22:24:03
【问题描述】:

当没有互联网时,会出现一个带有 cancelretry 按钮的警告对话框,并且在 retry 按钮上我递归调用 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;
}

【问题讨论】:

    标签: android android-alertdialog android-progressbar


    【解决方案1】:

    为进度条添加延迟:

        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 秒的进度对话框。

    【讨论】:

    • 抱歉没听懂。
    • 再次阅读我的问题,我说当没有互联网时,我的警报对话框会出现,当我按下重试时,它应该显示正在连接,如果 5 秒后互联网未激活,则再次显示我的警报对话框。
    • 您的标题:在重新连接到互联网时显示进度条,您的问题:现在我想要的是,重试时它应该显示进度条(意味着 5 秒延迟)。我回答了同样的添加延迟 5 秒然后你说在获取数据时不显示 pregress bar?你能澄清或编辑这个问题吗?谢谢! PS:好像你删除了你的评论
    • 好东西你想出来了!
    • 谢谢,我在重试按钮中移动了您的代码并且它有效,您认为我在加载时想要它,但我希望它在重试按钮中......无论如何它工作:)。
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多