Android:doInBackground中的运行时异常

时间:2013-12-21 15:03:23

标签: android

我无法找到此代码的错误。有人请帮帮我。我在其他项目中使用了相同的代码,在该项目中它运行良好。我只是尝试打开一个网址,将其加载到WebView中,我已经在manifest文件中提供了互联网权限。 这是代码:

package com.example.itmuantiragging;

import android.annotation.SuppressLint;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView; 
import android.webkit.WebViewClient;
import android.widget.Toast;

@SuppressLint("NewApi")
public class Fragment_Website extends Fragment {

WebView wv;
ProgressDialog pg;
Background bg;

public Fragment_Website() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_website, container,false);

    //Toast.makeText(getActivity(), "Loading... Please Wait..",Toast.LENGTH_LONG).show();

    wv = (WebView) rootView.findViewById(R.id.webView1);

    bg = new Background();
    bg.execute();

    return rootView;
}

 public void progress(){
        pg = new ProgressDialog(getActivity());
        pg.setTitle("");
        pg.setMessage("Please Wait.........");
        pg.setCancelable(false);
        pg.setIndeterminate(true);
        pg.show();
    }

    class Background extends AsyncTask<Void, Void, Void>
    {

        @SuppressLint("SetJavaScriptEnabled")
        @Override
        protected Void doInBackground(Void... arg0) {
            // TODO Auto-generated method stub


                try{
                    wv.loadUrl("http://www.siddharth.uphero.com/MTNL_address_locator.html");
                    }catch(Exception e){
                        e.printStackTrace();
                    }

                    wv.getSettings().setJavaScriptEnabled(true);
                    wv.getSettings().setLoadWithOverviewMode(true);
                    wv.getSettings().setUseWideViewPort(true);
                    wv.getSettings().setBuiltInZoomControls(true);
                    wv.setWebViewClient(new MyWebClient()); 


            return null;
        }
        @Override
        protected void onPostExecute(Void result) {




        }

        @Override
        protected void onPreExecute() {

            progress();
        }
    }
     public class MyWebClient extends WebViewClient
        {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub

                view.loadUrl(url);
                return true;

            }

            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
            super.onPageFinished(view, url);

                         pg.dismiss();

            }
        }


}

2 个答案:

答案 0 :(得分:1)

您只能更新UI线程上的视图。

答案 1 :(得分:0)

我不明白你为什么要进行后台操作,因为WebView有自己的方法来处理它。您正确使用WebView,因此您可以使用以下方法直接在android WebView中加载URL。

webview.loadUrl(url)

所以现在问题是如何显示进度条。好的是方法onPageStarted()onPageFinished()中的内置版,您可以在其中开始进度并停止进度。在onCreateView()方法中移动以下代码。

   wv.getSettings().setJavaScriptEnabled(true);
                    wv.getSettings().setLoadWithOverviewMode(true);
                    wv.getSettings().setUseWideViewPort(true);
                    wv.getSettings().setBuiltInZoomControls(true);
                    wv.setWebViewClient(new MyWebClient()); 

希望它有意义。