Android在加载网址时为webview添加不确定的进度条

时间:2014-03-31 10:19:28

标签: java android webview android-progressbar

您好我正在尝试在我等待加载webview时弹出的webview中实现进度条。我已经看到了一些方法,但我不确定哪种方法可以做到。

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</RelativeLayout>

我以编程方式创建进度条!

活动:

    public class MapActivity extends MenuActivity {

private final static String TAG = "HearingTest";
private WebView webView;
private String urlString;
private ProgressDialog progressDialog;
private Context context;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_layout);

    urlString = getString(R.string.location_url);

    WebViewSettings();

    LoadWebPage(urlString);

    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

        @Override
        protected void onPreExecute() {
            progressDialog = new ProgressDialog(context);
            progressDialog.setTitle("Loading...");
            progressDialog.setMessage("Please wait.");
            //progressDialog.setCancelable(false);
            progressDialog.setIndeterminate(true);
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                //Do something...
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            if (progressDialog!=null) {
                progressDialog.dismiss();
            }
        }
    };

    task.execute((Void[])null);
}

public void LoadWebPage(String url){

    try {
        webView.loadUrl(url);
        Log.d(TAG, "URL" + url + "connected");
    } 
    catch (Exception e) {
            Log.d(TAG, "URL: " + url + " couldn't connect.");
    }
}

public void WebViewSettings(){

    webView = (WebView) findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setLoadWithOverviewMode(true);

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().equals(urlString)) {
                // This is my web site, so do not override; let my WebView load the page
                return false;
            }
            // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }

        @Override
        public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
             handler.proceed();
        }
    });
}

    protected void DisplayProgressBar(){

    }
}

我遇到的问题是我真的不知道最好的方法是做什么。我正在做的方式当我创建进度条的新实例时,我得到一个空指针异常,我无法弄清楚为什么!另外,我真的不知道我是否采用最佳方式,因为我已经看到了使用线程的另一种方式。

如果有人能帮助我解决我的问题,或者说是一个更好的解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

context为空,这可能是您获得NullPointerException

的原因

context

中使用context = MapActivity.this;初始化onCreate