2013-12-21 6 views
0

이 코드의 문제점을 발견 할 수 없습니다. 누군가 나를 도와주세요. 나는 다른 프로젝트에서도 같은 코드를 사용했고 그 프로젝트에서 잘 작동했다. URL을 열어 WebView에로드하려고하고 있는데 이미 manifest 파일에서 인터넷 사용 권한을 부여했습니다. 코드는 다음과 같습니다.Android : doInBackground의 런타임 예외

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(); 

      } 
     } 


} 
+0

예외는 무엇입니까 게시하려면 stacktrace 코드를 가리키는? 아니면 수수께끼인가? – laalto

답변

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()); 

희망이 있습니다.

1

UI 스레드의보기 만 업데이트 할 수 있습니다.

+0

전에도 같은 코드를 사용했는데 성공했습니다 .. –

+0

누군가 정확한 문제는 어디 있는지 말해 주시겠습니까? –

+0

그가 UI가 아닌 스레드에서 UI를 업데이트하는 곳은 어디입니까? –