【问题标题】:Can I show progress dialog and error message while parsing XML using JavaScript?我可以在使用 JavaScript 解析 XML 时显示进度对话框和错误消息吗?
【发布时间】:2012-03-29 20:32:00
【问题描述】:

我正在为类似网站的博客开发 android web 应用程序。 为此,我正在显示 HTML 页面内容类别列表,单击时会显示与该类别相关的文章。

我从网站的 RSS 提要中获取这篇文章,它是 XML 格式的,并通过使用 JavaScript 来解析它以显示在 HTML 页面上。

解析 XML 的这个过程需要大量时间来加载页面。在此期间,我得到了空白屏幕。我已经实现了进度对话框,当页面第一次加载但 XML 被 JavaScript 解析时工作正常它没有出现。

这是我实现“进程”对话框的方式。 Activity.java:

@Override
public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
      this.getWindow().requestFeature(Window.FEATURE_PROGRESS);

        setContentView(R.layout.main);

        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
                Window.PROGRESS_VISIBILITY_ON);

        webview = (WebView) findViewById(R.id.webview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setBackgroundColor(0);

        final ProgressDialog progressDialog = new ProgressDialog(activity);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage("Loading...please wait");
        progressDialog.setCancelable(true);
        webview.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                view.loadUrl(url);
                return true;
            }

        });

        webview.loadUrl("file:///android_asset/HomePage.html");

        // WebChromeClient give progress etc info
        webview.setWebChromeClient(new WebChromeClient()
        {
            public void onProgressChanged(WebView view, int progress)
            {
                progressDialog.show();
                progressDialog.setProgress(0);
                activity.setProgress(progress * 1000);
                progressDialog.incrementProgressBy(progress);
                if (progress == 100 && progressDialog.isShowing())
                    progressDialog.dismiss();
            }
        });
}
  1. 如何在 JavaScript 解析 XML 时显示进度对话框?
  2. 如果没有可用于同一事物的互联网连接,我还想显示一条错误消息,他们有什么办法吗?
  3. 我已将通话功能用作“电话:电话号码”,但在我添加 de public boolean shouldOverrideUrlLoading 它不起作用?我做错了什么?

【问题讨论】:

标签: javascript android html android-webview progressdialog


【解决方案1】:

对于您的问题,您可以在 activity.java 文件中使用以下代码

   package com.package name;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.Toast;
public class Myactivity extends Activity {
    TextView myLabel;
    WebView wv;
    final Activity activity=this;
    /** Called when the activity is first created. */





    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);

        setContentView(R.layout.main);

        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,Window.PROGRESS_VISIBILITY_ON);

        wv=(WebView)findViewById(R.id.webview);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.setBackgroundColor(0);

        final ProgressDialog progressDialog = new ProgressDialog(activity);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setMessage("Loading...please wait");
        progressDialog.setCancelable(true);
        wv.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                 if (url.startsWith("tel:")) { 
                     Intent intent = new Intent(Intent.ACTION_DIAL,
                             Uri.parse(url)); 
                     startActivity(intent); 
                     return true;
             }else{
                view.loadUrl(url);
                return true;
            }

            }
        });

        wv.loadUrl("file:///android_asset/page.html");

        // WebChromeClient give progress etc info
        wv.setWebChromeClient(new WebChromeClient()
        {
            public void onProgressChanged(WebView view, int progress)
            {
                progressDialog.show();
                progressDialog.setProgress(0);
                activity.setProgress(progress * 1000);
                progressDialog.incrementProgressBy(progress);
                if (progress == 100 && progressDialog.isShowing())
                progressDialog.dismiss();
            }
        }); 

        if (AppStatus.getInstance(this).isOnline(this)) {

            Toast t = Toast.makeText(this,"Welcome !!!!",8000);
            t.show();
            } else {  
                AlertDialog alertDialog = new AlertDialog.Builder(
                        CafeNashikActivity.this).create();

        // Setting Dialog Title
        alertDialog.setTitle("No Internet");

        // Setting Dialog Message
        alertDialog.setMessage("Internet Connection not available!");

        // Setting Icon to Dialog
        //alertDialog.setIcon(R.drawable.tick);

        // Setting OK Button
        alertDialog.setButton("Exit", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    MyActivity.this.finish();

                }
        });

        // Showing Alert Message
        alertDialog.show();  
            }


    }


}

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2019-09-12
    相关资源
    最近更新 更多