2014-05-23 2 views
0

내 안드로이드 응용 프로그램에서 Sherlock 측면 탐색 조각을 사용하고 있습니다. 그러나, 나는 진행률 표시 줄과 함께 webviews을 모두 포함 6 조각을 사용하고 있습니다. 측면 탐색에있는 링크 중 하나를 선택하고 진행 표시 줄이 아직 완료하지 않은 경우, 그것은 나에게에서 널 포인터 예외를 제공한다는null 포인터 내에서 onProgressChanged를 사용하는 중 예외

@SuppressLint("SetJavaScriptEnabled") 
public class Fragment1 extends SherlockFragment { 
    private WebView mWebview; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     setHasOptionsMenu(true); 

     View rootView = inflater.inflate(R.layout.fragment1, container, false); 
     mWebview = (WebView) rootView.findViewById(R.id.webView1); 

     mWebview.setInitialScale(1); 
     mWebview.getSettings().setJavaScriptEnabled(true); 



     mWebview.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) 
      { 
        //Make the bar disappear after URL is loaded, and changes string to Loading... 
        getActivity().setTitle("Loading..."); 
        getActivity().setProgress(progress * 100); //Make the bar disappear after URL is loaded 

        // Return the app name after finish loading 
        if(progress == 100) 
        getActivity().setTitle(R.string.Fragment1); 
       } 

      }); 


     mWebview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       //Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mWebview.loadUrl("http://www.LINK"); 
     WebSettings zoomenable = mWebview.getSettings(); 
     zoomenable.setBuiltInZoomControls(true); 
     WebSettings wideviewenable = mWebview.getSettings(); 
     wideviewenable.setUseWideViewPort(true); 

     mWebview.setDownloadListener(new DownloadListener() { 
      public void onDownloadStart(String url, String userAgent, 
        String contentDisposition, String mimetype, 
        long contentLength) { 
       Intent i = new Intent(Intent.ACTION_VIEW); 
       i.setData(Uri.parse(url)); 
       startActivity(i); 
      } 
     }); 

     mWebview.setOnKeyListener(new OnKeyListener() 
     { 
      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) 
      { 
      if(mWebview.canGoBack()) 
      { 
      mWebview.goBack(); 
      return true; 
      } 

      return false; 
      } 
     }); 


     return rootView; 
    } 

    public class HelloWebViewClient extends WebViewClient { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.main_activity_actions, menu); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle presses on the action bar items 
     switch (item.getItemId()) { 
      case R.id.action_search: 
       mWebview.reload(); 
       return true; 
      default:return super.onOptionsItemSelected(item); 
     } 
    } 


} 

내가 직면하고 문제 :

여기에 조각 중 하나입니다 onProgressChanged 메서드입니다.

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

여기 로그 고양이 오류입니다 : 사전에

05-23 18:54:20.687: E/AndroidRuntime(20112): FATAL EXCEPTION: main 
05-23 18:54:20.687: E/AndroidRuntime(20112): java.lang.NullPointerException 
05-23 18:54:20.687: E/AndroidRuntime(20112): at petra.app.Fragment1$1.onProgressChanged(Fragment1.java:45) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:533) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at android.os.Looper.loop(Looper.java:137) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at android.app.ActivityThread.main(ActivityThread.java:5297) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at java.lang.reflect.Method.invokeNative(Native Method) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at java.lang.reflect.Method.invoke(Method.java:511) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
05-23 18:54:20.687: E/AndroidRuntime(20112): at dalvik.system.NativeStart.main(Native Method) 

감사

는 주요 활동에서 내가 진행률 표시 줄을 사용하려면 코드의 두 라인을 사용했다.

+0

로그 캣 – matiash

+0

@matiash에서의 예외 스택 추적을 게시하시기 바랍니다, 나는 로그 캣 오류를 게시를 확인하시기 바랍니다. – Izzo32

+0

getActivity가 null을 반환하는지 확인 했습니까? – dwbrito

답변

1

당신은 다음과 같은 코드를 시도 할 수 있습니다 :

mWebview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) 
     { 
       //Make the bar disappear after URL is loaded, and changes string to Loading... 
       Activity activity = getActivity(); 
       if (activity != null) { 
        activity.setTitle("Loading..."); 
        activity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 
        // Return the app name after finish loading 
        if(progress == 100) 
        activity.setTitle(R.string.Fragment1); 
       } 
      } 
     }); 
3

글쎄,이 사실은 활동이 더 이상 볼 수 없을 때 WebChromeClient가 게시 한 출금이 시작될 때 발생합니다.

당신은 이것 좀 봐,

이 코드에 수정을 적용 할 ... "getActivity()"통화는 null 있는지 확인하고해야

mWebview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) 
     { 
       // here you check the value of getActivity() and break up if needed 
      if(getActivity() == null) 
       return; 

       //Make the bar disappear after URL is loaded, and changes string to Loading... 
       getActivity().setTitle("Loading..."); 
       getActivity().setProgress(progress * 100); //Make the bar disappear after URL is loaded 

       // Return the app name after finish loading 
       if(progress == 100) 
       getActivity().setTitle(R.string.Fragment1); 
      } 

     }); 
+1

질문은 대화 상자를 사용하지 않고 이미 활동에있는 진행 표시기를 말합니다. – matiash

+0

죄송합니다. 나는이 질문에 대해 오해했습니다. 위의 내 대답을 편집했습니다. –