WebView 不显示内容

Posted

技术标签:

【中文标题】WebView 不显示内容【英文标题】:WebView not showing content 【发布时间】:2014-02-14 21:11:09 【问题描述】:

全部。

我在 android 上的 WebView 上显示从 EditText 字段获取的 url 内容时遇到了一些问题。

我只想添加一个插入到 EditText 字段中的字符串,以打开另一个活动的 url,其中 webView 使用 Google 搜索 url 打开,在 EditText 中搜索给定的文本。

这是我的 MainActivity:

package com.hbt.activities;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.webkit.WebView;
import android.widget.EditText;

public class MainActivity extends Activity 

    EditText term;
    String query;
    WebView intview;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    term = (EditText) findViewById(R.id.searchtext);
    query = term.getText().toString();

    intview = (WebView) findViewById(R.id.webView1);
    intview.getSettings().setBuiltInZoomControls(true);
    intview.getSettings().setjavascriptEnabled(true);
    intview.getSettings().setDomStorageEnabled(true);


public void openWikipedia(View intview)

     Intent intent = new Intent(this, Wikipedia.class);
     intent.putExtra("query", query);
     startActivity(intent);
    

public void openGoogle(View view)

     Intent intent = new Intent(this, Google.class);
     intent.putExtra("query", query);
     startActivity(intent);
    

这是我的 Google.java:

package com.hbt.activities;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View; 
import android.webkit.WebView;
import android.widget.Toast;

public class Google extends Activity 
String query;
WebView intview;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_google);


public void opengoogle (View webView1)
    intview = (WebView) findViewById(R.id.webView1);
    intview.getSettings().setBuiltInZoomControls(true);
    intview.getSettings().setJavaScriptEnabled(true);
    intview.getSettings().setDomStorageEnabled(true);
    intview.loadUrl("https://www.google.pt");

    String query = "";

    Bundle bundle = getIntent().getExtras();
    if (bundle == null)
        Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show();
    
    if (bundle != null) 
        query = bundle.getString("query");
    




@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  
    if (keyCode == KeyEvent.KEYCODE_BACK)
        onBackPressed();
        return true;
    
    else
        return super.onKeyDown(keyCode, event);
    


最后是 Wikipedia.java:

package com.hbt.activities;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebView;
import android.widget.Toast;

public class Wikipedia extends Activity 

    String query;
WebView intview;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wikipedia);


 public void openWikipedia (View view)
     intview = (WebView) findViewById(R.id.webView1);
     intview.getSettings().setBuiltInZoomControls(true);
     intview.getSettings().setJavaScriptEnabled(true);
     intview.getSettings().setDomStorageEnabled(true);

     String query = "";
     Bundle bundle = getIntent().getExtras();
     if (bundle == null)
        Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show();
     
     if (bundle != null) 
         query = bundle.getString("query");
     

     String url = "en.wikipedia.org/wiki/Special:Search?search="+ query;
     Intent i = new Intent(Intent.ACTION_VIEW);
     i.setData(Uri.parse(url));
     startActivity(i);

   

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event)  
    if (keyCode == KeyEvent.KEYCODE_BACK)
         onBackPressed();
         return true;
     
     else
        return super.onKeyDown(keyCode, event);
     


我真的不明白为什么 。任何帮助将不胜感激。提前致谢。

按照要求,这是布局 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >



<Button
    android:id="@+id/Wikipedia"
    android:layout_
    android:layout_
    android:layout_above="@+id/Google"
    android:layout_alignLeft="@+id/Google"
    android:layout_alignRight="@+id/Google"
    android:minEms="6"
    android:onClick="openWikipedia"
    android:text="@string/wikipedia" />

<Button
    android:id="@+id/Google"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:onClick="openGoogle"
    android:text="@string/google" />

<EditText
    android:id="@+id/searchtext"
    android:layout_
    android:layout_
    android:layout_above="@+id/Wikipedia"
    android:layout_alignLeft="@+id/Wikipedia"
    android:layout_alignRight="@+id/Google"
    android:layout_marginBottom="18dp"
    android:layout_marginTop="12dp"
    android:hint="@string/text_to_search_" />

<WebView
    android:id="@+id/webView1"
    android:layout_
    android:layout_
    android:layout_above="@+id/searchtext"
    android:layout_alignLeft="@+id/searchtext"
    android:layout_alignParentTop="true" />

</RelativeLayout>

接下来是***布局 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<WebView
    android:id="@+id/webView2"
    android:layout_
    android:layout_
    android:layout_alignParentTop="true" 
    />

</RelativeLayout>

和谷歌 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<WebView
    android:id="@+id/webView1"
    android:layout_
    android:layout_
    android:layout_alignParentTop="true" />

</RelativeLayout>

它们是不同的,因为我试图从多个方面处理这个问题。

【问题讨论】:

您是否在应用清单中添加了 INTERNET 权限? 是的,我做到了。在 标签旁边添加了 它只是显示一个空白屏幕。当我按下视图时,我看到了缩放控件,但没有加载任何内容。 看起来你甚至不需要额外的活动。您只需一项活动即可做到这一点。 我建议先让它与一个活动一起工作,然后继续使用多个活动。 【参考方案1】:

好的。您唯一需要的是 MainActivityma​​in_activity.xml

其他东西,据我所知,你并不真的需要。

这是 MainActivity 的代码清单:

public class MainActivity extends Activity 

    EditText term;
    String query;
    WebView intview;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        term = (EditText) findViewById(R.id.searchtext);
        query = term.getText().toString();

        intview = (WebView) findViewById(R.id.webView1);
        intview.getSettings().setBuiltInZoomControls(true);
        intview.getSettings().setJavaScriptEnabled(true);
        intview.getSettings().setDomStorageEnabled(true);
    

    public void openWikipedia(View intview) 
        String url = "http://en.wikipedia.org/wiki/" + query;
        this.intview.loadUrl(url);
    

    public void openGoogle(View view) 
        String url = "https://www.google.pt?q="+query;
        this.intview.loadUrl(url);
    

现在,主要活动的布局。与您拥有的原始版本相比,无需进行任何更改。但是,为了清楚起见,我将其发布。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity" >



<Button
    android:id="@+id/Wikipedia"
    android:layout_
    android:layout_
    android:layout_above="@+id/Google"
    android:layout_alignLeft="@+id/Google"
    android:layout_alignRight="@+id/Google"
    android:minEms="6"
    android:onClick="openWikipedia"
    android:text="Wikipedia" />

<Button
    android:id="@+id/Google"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:onClick="openGoogle"
    android:text="Google" />

<EditText
    android:id="@+id/searchtext"
    android:layout_
    android:layout_
    android:layout_above="@+id/Wikipedia"
    android:layout_alignLeft="@+id/Wikipedia"
    android:layout_alignRight="@+id/Google"
    android:layout_marginBottom="18dp"
    android:layout_marginTop="12dp"
    android:hint="Text to search" />

<WebView
    android:id="@+id/webView1"
    android:layout_
    android:layout_
    android:layout_above="@+id/searchtext"
    android:layout_alignLeft="@+id/searchtext"
    android:layout_alignParentTop="true" />

</RelativeLayout>

现在,一旦您按下按钮、Google 或 Wikipedia,您的 webview 应该开始加载显示内容。给它一些时间。

对于 Wikipedia: 我注意到,它有重定向,所以最后,它会在默认浏览器中打开新的 URL。你需要处理这个。

对于 Google: URL 可能设置不正确,但您可以查看它。

不过,WebView 无法正常加载的主要问题现在应该得到解决。

--------更新-------------- -----

现在,改变这些东西:

MainActivity.class

public class MainActivity extends Activity 

    EditText term;
    String query;
    WebView intview;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        term = (EditText) findViewById(R.id.searchtext);
        query = term.getText().toString();

        intview = (WebView) findViewById(R.id.webView1);
        intview.getSettings().setBuiltInZoomControls(true);
        intview.getSettings().setJavaScriptEnabled(true);
        intview.getSettings().setDomStorageEnabled(true);
    

    public void openWikipedia(View intview) 
        String url = "http://en.wikipedia.org/wiki/" + query;
        this.intview.loadUrl(url);
    

    public void openGoogle(View view) 
        Intent intent = new Intent(this, Google.class);
        intent.putExtra("query", term.getText().toString());
        startActivity(intent);
    

Google.class

public class Google extends Activity 
    String query;
    WebView intview;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_google);
        opengoogle();
    

    public void opengoogle() 
        intview = (WebView) findViewById(R.id.webView1);
        intview.getSettings().setBuiltInZoomControls(true);
        intview.getSettings().setJavaScriptEnabled(true);
        intview.getSettings().setDomStorageEnabled(true);
        intview.loadUrl("https://www.google.pt");

        String query = "";

        Bundle bundle = getIntent().getExtras();
        if (bundle == null) 
            Toast.makeText(getApplicationContext(), "Insert a search item.",
                    Toast.LENGTH_LONG).show();
        
        if (bundle != null) 
            query = bundle.getString("query");
            intview.loadUrl("http://www.google.com?q=" + query);
        

    

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
        if (keyCode == KeyEvent.KEYCODE_BACK) 
            onBackPressed();
            return true;
         else 
            return super.onKeyDown(keyCode, event);
        
    

【讨论】:

就在现场。我现在只面临这样的问题,一旦我进入 Google 活动,如果我按下其中一个按钮,应用就会崩溃。【参考方案2】:

在你的 onclick 方法中添加这个来获取 EditText 的当前值,然后发送意图:query = term.getText().toString();

public void openWikipedia(View intview)
     query = term.getText().toString();
     Intent intent = new Intent(this, Wikipedia.class);
     intent.putExtra("query", query);
     startActivity(intent);
    

public void openGoogle(View view)
     query = term.getText().toString();
     Intent intent = new Intent(this, Google.class);
     intent.putExtra("query", query);
     startActivity(intent);
    

在 onCreate() 中设置 webview:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_google);

    intview = (WebView) findViewById(R.id.webView1);
    intview.getSettings().setBuiltInZoomControls(true);
    intview.getSettings().setJavaScriptEnabled(true);
    intview.getSettings().setDomStorageEnabled(true);
    intview.loadUrl("https://www.google.pt");

    String query = "";

    Bundle bundle = getIntent().getExtras();
    if (bundle == null)
        Toast.makeText(getApplicationContext(), "Insert a search item.",Toast.LENGTH_LONG).show();
    
    if (bundle != null) 
        query = bundle.getString("query");
    


应该可以的。

【讨论】:

感谢帮助,但不行。 Web 视图为空白。我在 onCreate 方法中有 term.getText().toString()。 在您的 oncreate 方法中,您还应该设置 Web 视图。 还没有变化。我已经看到代码有一些问题,但我真的不知道从哪里开始。我相信它不应该在 mainActivity 和 WikipediaActivity 上都有 openwikipedia()。但我不知道在哪里以及如何为 webview 提供我想要的地址。

以上是关于WebView 不显示内容的主要内容,如果未能解决你的问题,请参考以下文章

捕获webview时,不显示视图的内容是白色的

清除内容:基础层与显示的用于清除 android 中的 webview 内容的 logcat 不匹配

Flutter webview 不显示我网站上的内容

如何在不使用webView的情况下在Android应用程序中显示Web内容

Webview 不显示带颜色的文本

Android:如何在webview中呈现html而不显示webview