2016-09-16 3 views
0

Я использую ProgressDialog в моем приложении WebView. В onPageStarted, я показываю диалог, но при использовании pd.dismiss в onPageFinished приложение вылетает.Ошибка приложения при отклонении ProgressDialog

web.setWebViewClient(new WebViewClient() { 

    //Opens all the Clicked Links in App itself.. (No Opera/Browser/Chrome/Uc popup) 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 

    //Shows a Dialog when there is an Error 
    @Override 
    public void onReceivedError(WebView view, int errorcode,String description, String fallingUrl) { 
     Toast.makeText(getActivity(),"NetWork Error", Toast.LENGTH_SHORT).show(); 
    } 

    //Showing ProgressBar when Page is Loading 
    @Override 
    public void onPageStarted(WebView view,String url , Bitmap favicon){ 
     ProgressDialog pd = new ProgressDialog(getActivity()); 
     pd.setMessage("Loading..."); 
     pd.show(); 

    } 

    //Hiding ProgressBar when Loading Finished 
    public void onPageFinished(WebView view,String Url){ 
      pd.dismiss(); 
    } 
}); 
+0

Добавить авария Детали регистрации здесь. – W4R10CK

+0

Можете ли вы поделиться своим стеклом? Журнал ошибок –

ответ

2

Это происходит для nullPointerException. Вам необходимо сделать ProgressDialog в качестве экземпляра, зарегистрированного в этом классе, и инициализировать его onCreate. Как следующее:

private ProgressDialog pd; 

@override 
public void onCreate() { 
    ProgressDialog pd = new ProgressDialog(getActivity()); 
    pd.setMessage("Loading..."); 
} 

теперь, когда вам нужно, чтобы показать, что просто вызвать метод Show() на этом PD progressDialog и вы можете уволить в любое время по телефону уволить() метод.

1

ProgressDialog pd = новый ProgressDialog (getActivity()); web.setWebViewClient (новый WebViewClient() {

    //Opens all the Clicked Links in App itself.. (No Opera/Browser/Chrome/Uc popup) 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl(url); 
        return true; 
       } 

       //Shows a Dialog when there is an Error 
       @Override 
       public void onReceivedError(WebView view, int errorcode,String description, String fallingUrl) { 
        Toast.makeText(getActivity(),"NetWork Error", Toast.LENGTH_SHORT).show(); 
       } 

       //Showing ProgressBar when Page is Loading 
       @Override 
       public void onPageStarted(WebView view,String url , Bitmap favicon){ 

        pd.setMessage("Loading..."); 
        pd.show(); 

       } 

       //Hiding ProgressBar when Loading Finished 
       public void onPageFinished(WebView view,String Url){ 
         pd.dismiss(); 
       } 
      }); 

Это работает для меня

+0

Это уже есть. Посмотрите на 'onPageFinished' –

+0

Вы объявили ProgressDialog pd снаружи, но не инициализировали. Вы должны инициализировать вне метода не в onPageStart(). –

+0

Да, я это знаю. Вы можете отредактировать свой пост, чтобы объяснить это более подробно, если ваше желание –

0

Попробуйте это:.

//Declare it globally 
LinearLayout progressLayout; 

В OnCreate():

progressLayout = (LinearLayout) findViewById(R.id.ll_refreshing_progress); 
wv_tandc.setWebViewClient(new MyWebViewClient()); 
wv_tandc.loadUrl(getString(R.string.terms_and_conditions_url)); 

Внедрение WebViewClient:

private class MyWebViewClient extends WebViewClient { 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 

      super.onPageStarted(view, url, favicon); 
      progressLayout.setVisibility(View.VISIBLE); 
     } 


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

     @Override 
     public void onPageFinished(WebView view, String url) { 
      System.out.println("on finish"); 
      progressLayout.setVisibility(View.GONE); 

     } 
    } 

Написать ниже код в XML, , где вы определили ваш WebView:

<LinearLayout 
     android:id="@+id/ll_refreshing_progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:visibility="gone" 
     android:padding="5dp" 
     android:orientation="vertical"> 

     <ProgressBar 
      android:layout_gravity="center_horizontal" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/sf_refreshing"/> 

    </LinearLayout> 

Вам не нужно использовать progressdialog, вместо этого вы можете использовать пользовательский макет.

0

Исходя из этого, я полагаю, что pd является переменной-членом.

//Hiding ProgressBar when Loading Finished 
public void onPageFinished(WebView view,String Url){ 
     pd.dismiss(); 
} 

Однако, вы, кажется, думаете, что это назначение, что же pd переменной, но это не так. См variable shadowing

//Showing ProgressBar when Page is Loading 
@Override 
public void onPageStarted(WebView view,String url , Bitmap favicon){ 
    ProgressDialog pd = new ProgressDialog(getActivity()); 
    pd.setMessage("Loading..."); 
    pd.show(); 

} 

Удалить ProgressDialog из ProgressDialog pd =, так что просто pd = new ...

0

Объявить ProgressDialog объект как переменную-член

+0

Это уже есть. Посмотрите на 'onPageFinished' –

+0

В' onPageStarted() 'он создает локальный объект, он должен быть переменной-членом. –

+0

Я знаю. Я говорю, что это уже переменная-член, и * that * нужно инициализировать, а не создавать локальную. –

0
public void onPageFinished(WebView view,String Url){ 
      if(pd ! =null)     
      pd.dismiss();  
     } 
+0

Это позволяет избежать проблемы, а не исправлять ее. –

0

Просто измените

@Override 
       public void onPageStarted(WebView view,String url , Bitmap favicon){ 
        pd = new ProgressDialog(getActivity()); 
        pd.setMessage("Loading..."); 
        pd.show(); 

       } 

       //Hiding ProgressBar when Loading Finished 
       public void onPageFinished(WebView view,String Url){ 
         pd.dismiss(); 
       } 

и объявить диалогового объекта как

private ProgressDialog pd; 
Смежные вопросы