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

问题描述 投票:2回答:1

当没有互联网时,会出现一个带有取消和重试按钮的警告对话框,而在重试按钮上,我递归地调用了newsResponse()方法。

现在我想要的是,在重试时它应该显示进度对话框(意味着延迟5秒),当没有互联网时再显示警告对话框。

我的守则。

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

© www.soinside.com 2019 - 2024. All rights reserved.