Могу ли я показать диалог прогресса и сообщение об ошибке при разборе XML с помощью JavaScript? - PullRequest
3 голосов
/ 30 марта 2012

Я занимаюсь разработкой Android-приложения для блога, как веб-сайт. Для этого я показываю HTML-страницу со списком категорий, в котором при нажатии отображаются статьи, относящиеся к этой категории.

Я загружаю эти статьи из RSS-каналов веб-сайта в формате XML, и с помощью JavaScript я анализирую их для отображения на странице HTML.

Этот процесс синтаксического анализа XML требует много времени для загрузки страницы. В течение этого периода я получаю пустой экран. Я реализовал диалоговое окно прогресса, которое отлично работает, когда страница загружается впервые, но когда XML обрабатывается при помощи JavaScript оно не появляется.

Вот как я реализовал диалог Process. 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. Как отобразить диалоговое окно прогресса во время синтаксического анализа XML с помощью JavaScript?
  2. Кроме того, я хочу показать сообщение об ошибке, если для той же вещи нет подключения к Интернету, является ли это каким-либо способом?
  3. Я использовал функцию вызова как «телефон: номер телефона», который работал, но после того, как я добавил де public boolean shouldOverrideUrlLoading это не работает? что я сделал не так?

1 Ответ

2 голосов
/ 03 апреля 2012

для ваших вопросов. Вы можете использовать следующий код в файле 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();  
            }


    }


}

Надеюсь, это поможет вам.

...