Autore Topic: Errore WebView  (Letto 343 volte)

Offline dimandrea

  • Nuovo arrivato
  • *
  • Post: 39
  • In realtà detesto con tutto me stesso Android.
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Asus MemoPad HD 7
  • Sistema operativo:
    Windows 7 - Windows 8.1 Up 1
Errore WebView
« il: 23 Settembre 2014, 17:18:25 CEST »
0
Ri-salve a tutti Androidiferi.

Mi ritrovo ancora una volta nell'infelice condizione di chiedere il vostro aiuto per un problema che affligge me ed una mia App.
Ho creato una WebApp in PHP e SQL. Progettata e "disegnata" con CSS come se fosse una normalissima App Android che gira su schermi a 7" (preferibilmente). Per evitare di usare un browser qualsiasi con qualsiasi porcheria che reca ho creato un'App Android che altri non è se non una WebView che richiama quella WebApp di prima.
Funziona a meraviglia: grafica e connessione stabili.

Ho anche cercato di eliminare la pagina di errore di default della WebView e rimpiazzata con una creata da me.
Il punto è proprio questo: Quando avvio l'App e il sensore WiFi è spento o il dispositivo non è connesso essa viene terminata in modo anomalo, ma se invece c'è connessione l'App funziona a dovere.

Vi posto il codice della classe:
Codice (Java): [Seleziona]
import java.lang.reflect.InvocationTargetException;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.widget.ZoomButtonsController;

@SuppressLint("JavascriptInterface") public class MainActivity extends Activity {
   
 private WebView myWebView;
 private String LOG_TAG = "AndroidWebViewActivity";
 private Context c;
 private boolean isConnected = true;
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        c = this;

        myWebView = (WebView) findViewById(R.id.webView1);
       
        // Disabilitazione Zoom
        myWebView.getSettings().setSupportZoom(false);
        myWebView.getSettings().setBuiltInZoomControls(false);
 
       
        // Abilitazione JS
        myWebView.getSettings().setJavaScriptEnabled(true);
       
        // Webview al massimo zoom out
        myWebView.getSettings().setLoadWithOverviewMode(true);
        myWebView.getSettings().setUseWideViewPort(true);
        myWebView.setWebViewClient(new MyWebViewClient());
        myWebView.setWebChromeClient(new MyWebChromeClient());
        myWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
       
        // Caricamento Pagina
        myWebView.loadUrl("http:192.168.5.90:8080/xxxxxxxxxxx");
                myWebView.setWebViewClient(new WebViewClient());
               
                // Verifica connessione
                ConnectivityManager connectivityManager = (ConnectivityManager)
                c.getSystemService(Context.CONNECTIVITY_SERVICE);
                if (connectivityManager != null) {
                        NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
                        if (ni.getState() != NetworkInfo.State.CONNECTED) {
                                // Non è connesso
                                isConnected = false;
                        }
                }
                       
                // Display messaggio errore
                        final String offlineMessageHtml = "mnt/sdcard/Terminale/stop.html";             // Offline
                        final String timeoutMessageHtml = "mnt/sdcard/Terminale/time.html";                     // Timeout

                        myWebView.setNetworkAvailable(isConnected);
                        myWebView.setWebViewClient(new WebViewClient() {
                            @Override
                            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                                if (isConnected) {
                                    return false;
                                } else {
                                    // Offline
                                    view.loadData(offlineMessageHtml, "text/html", "utf-8");
                                    return true;
                                }
                            }
                            @Override
                            // Timeout
                            public void onReceivedError (WebView view, int errorCode,
                                String description, String failingUrl) {
                                if (errorCode == ERROR_TIMEOUT) {
                                    view.stopLoading();  // may not be needed
                                    view.loadData(timeoutMessageHtml, "text/html", "utf-8");
                                }
                            }
                        });
                       
                       
 
    }
 
 private class MyWebViewClient extends WebViewClient {
     @Override
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
         if (Uri.parse(url).getHost().equals("demo.mysamplecode.com")) {
             return false;
         }
         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
         startActivity(intent);
         return true;
     }
 }
 
 private class MyWebChromeClient extends WebChromeClient {
     
  //display alert message in Web View
  @Override
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
         Log.d(LOG_TAG, message);
         new AlertDialog.Builder(view.getContext())
          .setMessage(message).setCancelable(true).show();
         result.confirm();
         return true;
     }

 }
 
 public class JavaScriptInterface {
     Context mContext;
     
     JavaScriptInterface(Context c) {
         mContext = c;
     }
     
     public void closeMyActivity() {
         finish();
     }
     
 }
 

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
     if(keyCode==KeyEvent.KEYCODE_BACK)
         Toast.makeText(getApplicationContext(), "Azione non consentita!",      
      Toast.LENGTH_LONG).show();

     return false;
        // Disabilitazione backbutton
 }
 
}

Ecco il manifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="it.xxxxxx.terminale"
   android:versionCode="1"
   android:versionName="1.0" >

    <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
        <activity
           android:name="it.xxxxx.terminale.MainActivity"
           android:label="@string/app_name"
           android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" >
           
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Ed ecco il LogCat.
https://drive.google.com/file/d/0B_VVPxpS97eUeE5zSVFYa1A3aVU/edit?usp=sharing

Grazie in anticipo
« Ultima modifica: 23 Settembre 2014, 17:47:32 CEST da dimandrea »
Stupido è chi lo stupido fa!