【问题标题】:How to display a progress bar with webview如何使用 webview 显示进度条
【发布时间】:2013-12-01 23:04:41
【问题描述】:

这是我的最后一个代码。我想显示用户网络信息。当用户离线时提醒用户。
我想离线或在线向用户展示。我使用进度条。当我使用此代码时,我的应用程序崩溃并退出我的应用程序。我该怎么办

   ConnectivityManager conMgr;
   NetworkInfo netInfo;
    private WebView webView;
    ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_activity1);

           Toast.makeText(Activity5.this, "welcome",30000).show();

            progressDialog = new ProgressDialog(Activity5.this);
            Button btn1 = (Button) findViewById(R.id.buttn1);
            btn1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    finish();
                    System.exit(0);
                }
            });
            Button b = (Button) findViewById(R.id.button10);
            b.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    startActivity(new Intent(Activity5.this, Activity2.class));
                }
            });


            String url = "http://student.iaun.ac.ir";
            webView = (WebView) findViewById(R.id.webView2);

            webView.setWebViewClient(new myWebViewClient());
            webView.getSettings().setJavaScriptEnabled(false);
            webView.getSettings().setLoadWithOverviewMode(true);
            webView.getSettings().setUseWideViewPort(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.loadUrl(url);
            webView.getSettings().setSavePassword(false);
            Button button = (Button) findViewById(R.id.new_button);
            button.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                        startActivity(new Intent(Activity5.this, Prefs.class));
                }
        });


            progressDialog.setMessage("please wait web page is loading");
            progressDialog.setCancelable(false);
            progressDialog.setCanceledOnTouchOutside(false);
            progressDialog.show();

            new Handler().postDelayed(new Runnable() {
                public void run() {

                    progressDialog.dismiss();

                }
            }, 25000);

            progressDialog = new ProgressDialog(Activity5.this);
                if (isOnline()) {
                       /*Your Code*/
                  }
                else{
                   try {
                AlertDialog alertDialog = new AlertDialog.Builder(
                        Activity5.this).create();
                alertDialog.setTitle("Info");
                alertDialog.setMessage("Please check your internet connection");
                alertDialog.setButton("OK",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                finish();
                            }
                        });
                alertDialog.show();
            } catch (Exception e) {
            }
        }


            new Thread(new Runnable() {
                @Override
                public void run() {
                                  try {
                                        startDelay();
                                        webView.getSettings().setJavaScriptEnabled(true);     
                                  } catch (InterruptedException e) {
                                     e.printStackTrace();
                                    }

                        }
            }).start();    

    }



    void startDelay() throws InterruptedException {
        Thread.sleep(15000);
    }
       private boolean isOnline() {
            conMgr = (ConnectivityManager) getApplicationContext()
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            netInfo = conMgr.getActiveNetworkInfo();

            if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
                return false;
            }
            return true;
        }

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity1, menu);
        return true;


    }


    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();
            return true;
        }
        // If it wasn't the Back key or there's no web page history, bubble up to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    }

【问题讨论】:

    标签: android android-activity webview loading progress


    【解决方案1】:

    要点是:

    1. 您不能在单击按钮时使用 System.exit(0),您可以使用 finish() 来完成该活动或使用 moveTaskToBack(true) 来最小化应用程序。

    2. I would like to refer u this link :

    3. 先看懂每一件事,再往前走,不只是复制粘贴代码,理解背后的概念和逻辑。

    4. 如果您在这个主题上需要更多帮助,那么我就在这里,但请花点时间尝试理解其中的逻辑

    【讨论】:

      【解决方案2】:

      我已经更改了代码,现在会出现一个进度对话框,持续 20 秒,同时 webview 也在加载其内容...

      public class Activity1 extends Activity {
      
          private webview webview;
          ProgressDialog progressDialog;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              Toast.makeText(getApplicationContext(), "welcome", Toast.LENGTH_LONG)
                      .show();
              progressDialog = new ProgressDialog(Activity1.this);
              String url = "http://student.iaun.ac.ir";
              webview = (webview) findViewById(R.id.webview);
              webview.getSettings().setJavaScriptEnabled(false);
              webview.getSettings().setLoadWithOverviewMode(true);
              webview.getSettings().setUseWideViewPort(true);
              webview.getSettings().setBuiltInZoomControls(true);
              webview.loadUrl(url);
      
              progressDialog.setMessage("Loading ...");
              progressDialog.setCancelable(false);
              progressDialog.setCanceledOnTouchOutside(false);
              progressDialog.show();
      
              new Handler().postDelayed(new Runnable() {
                  public void run() {
      
                      progressDialog.dismiss();
      
                  }
              }, 20000);
      
      
      
          }
      
          public boolean onKeyDown(int keyCode, KeyEvent event) {
              // Check if the key event was the Back button and if there's history
              if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
                  webview.goBack();
                  return true;
              }
              // If it wasn't the Back key or there's no web page history, bubble up
              // to the default
              // system behavior (probably exit the activity)
              return super.onKeyDown(keyCode, event);
          }
      }
      

      【讨论】:

      • 我写了这段代码,但我想在我的程序中使用 thread.sleep 我应该怎么做
      • Handler 也是 android 中的一个线程, postDelayed() 方法的第二个参数是它的睡眠时间,从这段代码中的行 progressDialog.dismiss(); 20秒后执行...
      • 不,我想在我的程序中使用 thread.sleep 来设置 JavaScriptEnabled(true),因为我首先设置 JavaScriptEnabled(false) 和 15 秒后设置 JavaScriptEnabled(true)。我应该怎么做
      • 您只需在 run() 方法中添加启用 java 脚本的语句,如果您想要一个单独的线程,那么您可以创建它并使用 sleep
      • 我想添加代码,向用户显示互联网状况。您使用 alertDialog.setMessage("请检查您的互联网连接");在你的第一条鳕鱼中。我想当用户离线时它显示警报或进度条
      【解决方案3】:

      你必须使用WebViewClient,并覆盖onPageStarted()、onpageFinished()等方法...

      public class WebActivity extends Activity {
              private WebView browser;
              ProgressDialog progressDialog;
              ConnectivityManager conMgr;
              NetworkInfo netInfo;
              String url;
      
              @SuppressWarnings("deprecation")
              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_web_activity);
                  browser = (WebView) findViewById(R.id.shop);
                  progressDialog = new ProgressDialog(WebActivity.this);
                  if (isOnline()) {
                      browser.getSettings().setDomStorageEnabled(true);
                      browser.getSettings().setJavaScriptEnabled(true);
      
                      browser.loadUrl(/*Your url paste here*/);
                      browser.setWebViewClient(new WebViewClient() {
                          @Override
                          public boolean shouldOverrideUrlLoading(WebView view, String url) {
                              return false;
                          }
      
                          @Override
                          public void onPageFinished(WebView view, String url) {
                              super.onPageFinished(view, url);
                              progressDialog.dismiss();
                          }
      
                          @Override
                          public void onPageStarted(WebView view, String url,
                                  Bitmap favicon) {
                              // TODO Auto-generated method stub
                              super.onPageStarted(view, url, favicon);
                              progressDialog.setMessage("Loading ...");
                              progressDialog.setCancelable(false);
                              progressDialog.setCanceledOnTouchOutside(false);
                              progressDialog.show();
                          }
                      });
                  } else {
                      try {
                          AlertDialog alertDialog = new AlertDialog.Builder(
                                  WebActivity.this).create();
                          alertDialog.setTitle("Info");
                          alertDialog.setMessage("Please check your internet connection");
                          alertDialog.setButton("OK",
                                  new DialogInterface.OnClickListener() {
                                      public void onClick(DialogInterface dialog,
                                              int which) {
                                          finish();
                                      }
                                  });
                          alertDialog.show();
                      } catch (Exception e) {
                      }
                  }
              }
      
              private boolean isOnline() {
                  conMgr = (ConnectivityManager) getApplicationContext()
                          .getSystemService(Context.CONNECTIVITY_SERVICE);
                  netInfo = conMgr.getActiveNetworkInfo();
      
                  if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
                      return false;
                  }
                  return true;
              }
      
              public boolean onKeyDown(int keyCode, KeyEvent event) {
                  if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {
                      browser.goBack();
                      return true;
                  } else {
                      moveTaskToBack(true);
                      return super.onKeyDown(keyCode, event);
                  }
              }
          }
      

      这是检查用户网络状态的代码...

      ConnectivityManager conMgr;
      NetworkInfo netInfo;
      ProgressDialog progressDialog;
      
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_web_activity);
              browser = (WebView) findViewById(R.id.shop);
      
              progressDialog = new ProgressDialog(WebActivity.this);
                  if (isOnline()) {
                         /*Your Code*/
                    }
                  else{
                     try {
                  AlertDialog alertDialog = new AlertDialog.Builder(
                          WebActivity.this).create();
                  alertDialog.setTitle("Info");
                  alertDialog.setMessage("Please check your internet connection");
                  alertDialog.setButton("OK",
                          new DialogInterface.OnClickListener() {
                              public void onClick(DialogInterface dialog,
                                      int which) {
                                  finish();
                              }
                          });
                  alertDialog.show();
              } catch (Exception e) {
              }
          }
      

      这是检查状态的 isOnline() 方法...

      private boolean isOnline() {
              conMgr = (ConnectivityManager) getApplicationContext()
                      .getSystemService(Context.CONNECTIVITY_SERVICE);
              netInfo = conMgr.getActiveNetworkInfo();
      
              if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
                  return false;
              }
              return true;
          }
      

      【讨论】:

      • Android:我使用此代码,但它不起作用,程序崩溃
      • @user3051593:我使用此代码,但它不起作用并且程序崩溃
      • 您只需要一个警告对话框,直到您的网页完成加载,所以您只需使用 WebViewClient,它会解决您的问题,您能告诉我究竟是什么错误(来自您的 logcat)。跨度>
      • eclipse 没有错误。当我运行程序时它崩溃并说不幸的是,web 已经停止并退出程序。你能输入写代码吗?我的 web 视图 cod 是你可以看到我的 txt记事本中的代码upload.tehran98.com/upme/uploads/19dc061db3f3ddf31.rar
      • 你只是删除了倒计时,你的WebView实例在哪里,你提供的链接是无效的......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      相关资源
      最近更新 更多