findViewById为WebView返回null

时间:2013-09-22 10:41:36

标签: android nullpointerexception android-webview

我正在尝试构建一个Android应用程序,它只包含一个webview。我从android dev site中取了示例并对其进行了修改。但是看起来很简单,每次调用findViewById都会产生一个空指针。 .java文件:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webView = (WebView) findViewById(R.id.webview);
        // returns null pointer 
        webView.loadUrl("file:///android_asset/index.html");

        setContentView(webView);
    }
}

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

我将以下行放入清单:

<uses-permission android:name="android.permission.INTERNET" />

我很困惑......

2 个答案:

答案 0 :(得分:11)

更改为

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout); // muylayout is your layout.xml
    WebView webView = (WebView) findViewById(R.id.webview);
    // returns null pointer 
    webView.loadUrl("file:///android_asset/index.html");
}
}

在调用findViewById之前,您需要将布局的内容设置为活动。 findViewById查找当前布局中提供的ID已膨胀的视图。

答案 1 :(得分:1)

以防万一接受的答案无效。由于我有两种不同的手机和平板电脑布局,但只有一种具有导致findViewById()得到null的WebView。