Android 将刷新侦听器添加到WebView的SwipeRefreshLayout时出现空对象引用错误

Android 将刷新侦听器添加到WebView的SwipeRefreshLayout时出现空对象引用错误,android,android-webview,swiperefreshlayout,Android,Android Webview,Swiperefreshlayout,当我添加这行代码时 swipeLayout.setOnRefreshListener(this); 我得到这个错误 void android.support.v4.widget.SwipeRefreshLayout.setOnRefreshListener (android.support.v4.widget.SwipeRefreshLayout$OnRefreshListener)' on a null object reference 主要活动 import android.app.Ac

当我添加这行代码时

swipeLayout.setOnRefreshListener(this);
我得到这个错误

void android.support.v4.widget.SwipeRefreshLayout.setOnRefreshListener
(android.support.v4.widget.SwipeRefreshLayout$OnRefreshListener)'
on a null object reference
主要活动

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.support.v4.widget.SwipeRefreshLayout;

public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener {
    private WebView mWebView;
    private SwipeRefreshLayout swipeLayout;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        mWebView = new WebView(this);

        mWebView.loadUrl("https://secure.tickspot.com");
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        swipeLayout.setOnRefreshListener(this);
    }

    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onRefresh() {
        mWebView.reload();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                swipeLayout.setRefreshing(false);
            }
        }, 1000);
    }

}
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mkyong.android"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="12" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:hardwareAccelerated="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:id="@+id/main_activity"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

我是android开发新手,在理解错误信息方面遇到了困难。救命啊! 如果我做错了什么,我也会喜欢这样的反馈:)

编辑

我将滑动刷新布局代码移动到

layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
</android.support.v4.widget.SwipeRefreshLayout>

我不得不改变

mWebView=新的WebView(此)

mWebView=(WebView)findViewById(R.id.WebView)

我必须在main.xml文件中的SwipeRefreshLayout xml之间添加以下内容

   <WebView android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        android:layout_alignParentTop="true"/> 


我已将SwipeRefreshLayout刷新侦听器设置为onResume。它对我很有用。

你应该把它放在与视图相关联的布局中(现在还没有)。是setContentView,是把它放在layout/main.xmlthis.setContentView(mWebView);这不是你想做的,你应该把你想显示的任何东西放在你的主布局中,包括WebView。我绝对建议你遵循一个教程,你犯的错误只会在没有基本了解Android开发工作原理的情况下发生。基础很重要,但您对swiperefreshlayout的使用也需要更专业的研究。我通过谷歌搜索找到了这个。请尝试删除mWebView并首先尝试以下操作: