2013-12-07 2 views
0

Я хочу показать нормальный веб-просмотр, когда приложение подключено к Интернету (на самом деле это то, что у меня есть и что нужно добавить второй фрагмент), но когда оно не подключено к Интернету (оно работает, но оно показывает, что веб-страница недоступна, браузер по умолчанию для Android и я не хочу ее), я хочу показать другой фрагмент с текстовым представлением и кнопкой TRY AGAIN. Есть ли кто-нибудь, кто может мне помочь? Я использую SherlockFragment, и ниже я отправляю код с Webview без другого фрагмента. Спасибо за любой ответ.WebView - нет фрагмента соединения и контента

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.layout, container, false); 
     if (isOnline()){ 
     WebView myWebView = (WebView) v.findViewById(R.id.id); 

     final ProgressDialog progressDialog; 
     progressDialog = new ProgressDialog(getActivity()); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.setMessage("Prosím čakajte. Prebieha načítavanie..."); 
     progressDialog.setCancelable(true); 
     progressDialog.setProgress(0); 
     progressDialog.show(); 

     myWebView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
        if(progressDialog != null) 
         progressDialog.setProgress(0); 
         getActivity().setProgress(progress * 1000); 
         progressDialog.incrementProgressBy(progress); 
         if (progress == 100 && progressDialog.isShowing()) 
          progressDialog.dismiss(); 
        } 

     }); 

     myWebView.getSettings().setBuiltInZoomControls(false); 
     myWebView.getSettings().setSupportZoom(false); 
     myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     myWebView.getSettings().setAllowFileAccess(true); 
     myWebView.getSettings().setDomStorageEnabled(true); 
     myWebView.getSettings().setJavaScriptEnabled(true); 

     myWebView.loadUrl("webpage");   
    } 
     else{ 
      Intent intent = new Intent(getActivity(), class.class); 
      getActivity().startActivity(intent); 
     } 
     return v; 
    } 
    private boolean isOnline() { 

     ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService (Context.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() != null 
     && conMgr.getActiveNetworkInfo().isAvailable() 
     && conMgr.getActiveNetworkInfo().isConnected()) { 
     return true; 

     } else { 
     Log.v(getTag(), "Internet Connection Not Present"); 
     return false; 
     } 
    } 
    } 

LOG CAT

12-08 09:17:57.852: E/AndroidRuntime(17630): FATAL EXCEPTION: main 
12-08 09:17:57.852: E/AndroidRuntime(17630): java.lang.NullPointerException 
12-08 09:17:57.852: E/AndroidRuntime(17630): at sk.soszm.polytechnicka.Novinky.isOnline(Novinky.java:71) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at sk.soszm.polytechnicka.Novinky.onCreateView(Novinky.java:31) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.os.Handler.handleCallback(Handler.java:725) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.os.Looper.loop(Looper.java:137) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at android.app.ActivityThread.main(ActivityThread.java:5039) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at java.lang.reflect.Method.invokeNative(Native Method) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at java.lang.reflect.Method.invoke(Method.java:511) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-08 09:17:57.852: E/AndroidRuntime(17630): at dalvik.system.NativeStart.main(Native Method) 

ответ

1

Вы можете контролировать, является ли устройство, подключенное к Интернету или нет. Если он не подключен, просто сделайте видимость WebView до GONE и отобразите текстовое сообщение.

Используйте это, чтобы проверить подключение к Интернету:

ConnectivityManager cm = 
     (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isConnected = activeNetwork != null && 
         activeNetwork.isConnectedOrConnecting(); 

Источник: http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

После того, как вы получили статус подключения, выполните следующие действия:

if(isConnected) { 
    //your WebView code 
} else { 
    //TextView showing "Try Again" 
} 

Вы можете использовать setVisibility(int) для программно показать/скрыть вид

Источник: http://developer.android.com/reference/android/view/View.html#setVisibility%28int%29

+0

Спасибо за ответ, я попытался реализовать свой код, но он не работает. Можете ли вы проверить код, который я редактировал, пожалуйста? Благодарю. Также отправляю LogCat – user2900523

+0

@ user2900523 Что такое строка 71? – JoelFernandes

+0

@ user2900523 Кстати, вы дали разрешение ' \t ' в 'AndroidManifest.xml' файл? – JoelFernandes

Смежные вопросы