2011-05-09 17 views
6

Recientemente he utilizado Android Development y estaba buscando utilizar las páginas web de visualización WebView. Recogí de la muestra que se dio en el sitio de Google y, por alguna razón, el emulador siguió diciendo que la página no estaba disponible. Busqué en StackOverflow y encontré enlaces relacionados con WebViewClient. Intenté eso también pero no tuve suerte allí, lo he comprobado varias veces acerca de la entrada de manifiesto para el permiso de internet y está allí. Como prueba, ejecuté el navegador disponible dentro del emulador y, de hecho, mi firewall apareció una pregunta sobre si permitir o no el acceso. La ventana emergente nunca vino a mí cuando la estaba ejecutando desde el programa. El código que tengo es lo que hay páginas de GoogleNo se puede cargar la página web con WebView en Android

mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://www.google.com"); 
    mWebView.setWebViewClient(new HelloWebViewClient()); 

    private class HelloWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 
     return true; 
    } 

he intentado cargar simple html directamente utilizando loadData y funcionó bien. No sé qué está pasando y cómo se puede resolver. Le agradecería cualquier ayuda en esto.

Agregar el manifiesto de Android aquí

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.hellowebview" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".HelloWebView" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity>  
<uses-permission android:name="android.permission.INTERNET" /> 
</application> 
</manifest> 

Para comprobar si es sólo un WebView cosita, he intentado acceder a Internet a través de HTTPGet y httpResonse clases y tiene el mismo problema, el código no fue capaz de conectarse a la sitio dado Fracasó indicando el siguiente

05-10 00:37:53.191: WARN/System.err(294): java.net.UnknownHostException: feeds.feedburner.com 
05-10 00:37:53.230: WARN/System.err(294):  at java.net.InetAddress.lookupHostByName(InetAddress.java:513) 
05-10 00:37:53.230: WARN/System.err(294):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:278) 
05-10 00:37:53.230: WARN/System.err(294):  at java.net.InetAddress.getAllByName(InetAddress.java:242) 
05-10 00:37:53.250: WARN/System.err(294):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 
05-10 00:37:53.250: WARN/System.err(294):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
05-10 00:37:53.250: WARN/System.err(294):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
05-10 00:37:53.271: WARN/System.err(294):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 
05-10 00:37:53.271: WARN/System.err(294):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
05-10 00:37:53.280: WARN/System.err(294):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
05-10 00:37:53.291: WARN/System.err(294):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
05-10 00:37:53.301: WARN/System.err(294):  at com.example.hellowebview.HelloWebView.onCreate(HelloWebView.java:43) 
05-10 00:37:53.301: WARN/System.err(294):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-10 00:37:53.309: WARN/System.err(294):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-10 00:37:53.322: WARN/System.err(294):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-10 00:37:53.330: WARN/System.err(294):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-10 00:37:53.340: WARN/System.err(294):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-10 00:37:53.350: WARN/System.err(294):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 00:37:53.350: WARN/System.err(294):  at android.os.Looper.loop(Looper.java:123) 
05-10 00:37:53.361: WARN/System.err(294):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-10 00:37:53.361: WARN/System.err(294):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 00:37:53.372: WARN/System.err(294):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-10 00:37:53.380: WARN/System.err(294):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-10 00:37:53.380: WARN/System.err(294):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-10 00:37:53.401: WARN/System.err(294):  at dalvik.system.NativeStart.main(Native Method) 
05-10 00:37:56.773: WARN/ActivityManager(58): Launch timeout has expired, giving up wake lock! 
05-10 00:37:58.083: WARN/ActivityManager(58): Activity idle timeout for HistoryRecord{44fc9108 com.example.hellowebview/.HelloWebView} 
05-10 00:38:06.300: DEBUG/KeyguardViewMediator(58): pokeWakelock(5000) 
05-10 00:38:06.651: INFO/ARMAssembler(58): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x3724c8:0x3725d4] in 7266287 ns 
05-10 00:38:06.720: INFO/ARMAssembler(58): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x371380:0x371548] in 1486222 ns 
05-10 00:38:30.430: DEBUG/AndroidRuntime(294): Shutting down VM 
05-10 00:38:30.430: WARN/dalvikvm(294): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294): FATAL EXCEPTION: main 
05-10 00:38:30.752: ERROR/AndroidRuntime(294): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hellowebview/com.example.hellowebview.HelloWebView}: java.lang.NullPointerException 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.os.Looper.loop(Looper.java:123) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at dalvik.system.NativeStart.main(Native Method) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294): Caused by: java.lang.NullPointerException 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at com.example.hellowebview.HelloWebView.onCreate(HelloWebView.java:51) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
05-10 00:38:30.752: ERROR/AndroidRuntime(294):  ... 11 more 

que tenemos. Por alguna razón, el orden en que se establece el permiso importa mucho. Cambié el orden de mi configuración de permisos en el archivo de manifiesto y funcionó. Aquí está la modificación manifiesta

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.hellowebview" 
android:versionCode="1" 
android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
<activity android:name=".HelloWebView" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.NoTitleBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity>  
</application> 
</manifest> 

No estoy seguro de cuál es el significado de esto, pero apreciaría si alguien podía dar más detalles.

+2

¿Ha agregado el permiso a internet en su manifiesto? – Varun

+0

Sí lo hice, eso fue lo primero que hice . Lo dimos justo después de la etiqueta de actividad y dentro de la etiqueta de aplicación. – vikramjb

+0

Ignore mi respuesta, la solución solo funcionó para un proyecto de demostración independiente que tenía. Integré el mismo código en otra aplicación con dos actividades donde el navegador estaba en la segunda actividad y no pudo cargar la página mientras el navegador interno solo está cargando bien. – vikramjb

Respuesta

8

Entendido. Por alguna razón, el orden en que se establece el permiso importa mucho. Cambié el orden de mi configuración de permisos en el archivo de manifiesto y funcionó. Aquí está la modificados manifiesta

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.hellowebview" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
    <activity android:name=".HelloWebView" 
       android:label="@string/app_name" 
       android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity>  
</application> 
</manifest> 
+7

No era el orden sino la jerarquía de las etiquetas. El permiso debe ser directo al niño para manifestarse, no ordenado dentro de la etiqueta de la aplicación. – Tapirboy

+0

Gracias por la información Tapirboy. Lo aprecio. – vikramjb

+0

NOTA: antes de ' y luego permitir que se navegue por Internet. – YumYumYum

1

Su código se ve bien. Me aseguraré de que Internet funcione correctamente en el emulador al navegar algunas páginas en el navegador Android. He tenido problemas antes de que el emulador perdiera acceso a la red.

+0

Lo hice, utilicé el navegador del emulador para buscar a través de google y mirar otra página web además de google también, y funcionó bien. – vikramjb

5
 mWebView = (WebView) findViewById(R.id.webview);  
     WebSettings setting =mWebView.getSettings(); 
     mWebView.setWebViewClient(new WebViewClient() { 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     return true; 
     } 
     mWebView.loadUrl("http://www.google.com"); 

Usar este código .shouldOverrideUrlLoading() No utilice compulsary.use este código y por favor, responda este código funcione o no

+0

Tenía ese código en su lugar. Moví el atributo de permiso en el archivo de manifiesto para que esté antes de la etiqueta de la aplicación y comenzó a funcionar bien. Gracias por el codigo. – vikramjb

+0

Necesario para usar esto: '' y luego funcionó. – YumYumYum

Cuestiones relacionadas