2014-01-31 3 views
0

Im using webview, который загружает веб-страницу, а затем каждые 5 секунд перезагружает эту страницу. Страница загружена ОК, но после 5 секунд, когда следует начать перезагрузку, я получаю следующее:Webview reload page get force close

Особенно в строке 48 где есть метод: wvNovaMenzaCammera.reload();

01-31 21:01:06.198 26188-26361/com.pfittech.menzauniza E/AndroidRuntime﹕ FATAL EXCEPTION: Timer-0 
    java.lang.RuntimeException: java.lang.Throwable: Warning: A WebView method was called on thread 'Timer-0'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads. 
      at android.webkit.WebView.checkThread(WebView.java:2093) 
      at android.webkit.WebView.reload(WebView.java:955) 
      at com.pfittech.menzauniza.CommunityFragment$1$1.run(CommunityFragment.java:48) 
      at java.util.Timer$TimerImpl.run(Timer.java:284) 
    Caused by: java.lang.Throwable: Warning: A WebView method was called on thread 'Timer-0'. All WebView methods must be called on the UI thread. Future versions of WebView may not support use on other threads. 
      at android.webkit.WebView.checkThread(WebView.java:2084) 
            at android.webkit.WebView.reload(WebView.java:955) 
            at com.pfittech.menzauniza.CommunityFragment$1$1.run(CommunityFragment.java:48) 
            at java.util.Timer$TimerImpl.run(Timer.java:284) 

Существует мой код:

public class CommunityFragment extends Fragment { 
WebView wvNovaMenzaCammera; 
private static final String TAG = "Cammera 1"; 
private ProgressDialog progressBarWV1; 
public CommunityFragment(){} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_community, container, false); 
    wvNovaMenzaCammera = (WebView)rootView.findViewById(R.id.wvCammera1); 
    getActivity().runOnUiThread(new Runnable() { 
     public void run() { 
      WebSettings webSettings = wvNovaMenzaCammera.getSettings(); 
      wvNovaMenzaCammera.getSettings().setJavaScriptEnabled(true); 
      wvNovaMenzaCammera.loadUrl("http://zuzo.sk/ftp/akt-a.jpg"); 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        wvNovaMenzaCammera.reload(); 
       } 
      }, 5000, 5000); 
     } 
    }); 
    return rootView; 
} 

ответ

2

Изменение TimerTask на следующее:

new TimerTask() { 
    @Override 
    public void run() { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       wvNovaMenzaCammera.reload(); 
      } 
     });  
    } 
} 

Как говорит журнал ошибок, вы должны перезагрузить WebView в потоке пользовательского интерфейса, и ваш TimerTask работает в фоновом потоке.

+0

um У меня есть небольшая проблема с его работой, но когда я покинул эту активность, я получаю FC, потому что активность больше не существует, но таймер/поток запущен, есть ли способ остановить этот поток/запустить, когда Im покидает эту активность. < –

+1

ссылку на ваш таймер и вызов 'yourTimer.cancel()' когда приложение закрывается (т.е. в 'onPaused()'). –

+0

ok проблема исправлена ​​thx –