Android 编译时出现空指针异常

Android 编译时出现空指针异常,android,caching,webview,nullpointerexception,android-context,Android,Caching,Webview,Nullpointerexception,Android Context,我已经从android stuido开发了一个简单的webview应用程序,它将在联机时加载页面的url,并在脱机时显示缓存文件。但是我得到了一个恒定的误差 Null pointer Exception at java.lang.reflect.Method.invoke(Native Method)  atcom.android.inte

我已经从android stuido开发了一个简单的webview应用程序,它将在联机时加载页面的url,并在脱机时显示缓存文件。但是我得到了一个恒定的误差

 Null pointer Exception
    at java.lang.reflect.Method.invoke(Native Method)                                                                           
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit
.java:726)                                                                                 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
下面是我来自Mainactivity.java的代码

package com.example.sagar.cdproutine;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

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

        Context context = null;
        WebView webView = new WebView(context);
        webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024); // 5MB
        webView.getSettings().setAppCachePath(
            getApplicationContext().getCacheDir().getAbsolutePath());
        webView.getSettings().setAllowFileAccess(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // load online by default

        if (!isNetworkAvailable()) { // loading offline
            webView.getSettings().setCacheMode(
                WebSettings.LOAD_CACHE_ELSE_NETWORK);
        }

        webView.loadUrl("http://www.sagarrawal.com.np");
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager = (ConnectivityManager)
        getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo =
            connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null;
    }
}
从我的manifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sagar.cdproutine">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
我认为是环境造成的问题,但我不知道如何解决它。 任何帮助都将不胜感激

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
我错过什么了吗? 这里的这一行是空的,您将它传递给web视图

Context=null

试着这样做:


WebView WebView=新建WebView getApplicationContext

正如David提到的,不要传递空上下文

这是OnCreate

webView = (WebView) findViewById(R.id.webView);
initWebView();//Initialize the WebView
webView.loadUrl(url);//pass your Url
对于initWebView

private void initWebView() {
    webView.setWebChromeClient(new MyWebChromeClient(this));
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);        
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webView.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
        }
    });
    webView.clearCache(true);
    webView.clearHistory();
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setHorizontalScrollBarEnabled(false);
}
对于MyWebChromeClient,请执行以下操作:

private class MyWebChromeClient extends WebChromeClient {
    Context context;

    public MyWebChromeClient(Context context) {
        super();
        this.context = context;
    }


}

另请查看此参考资料-

感谢David的快速回复,是的,我按照您的建议做了。我删除了line Context=null;WebView WebView=新的WebViewcontext;换成我是不是遗漏了什么?这里的这一行是空的,您将它传递给web视图。Context=null;尝试以下操作:WebView WebView=newwebview getApplicationContext;但现在这个应用程序只显示了一个白色屏幕,如果我用www.google.com替换了url www.sagarawal.com.np,那么它将从手机互联网浏览器而不是webview本身打开。我非常感谢你们的建议,伙计们,但当我在OnCreate webview.setWebViewClientnew WebViewController中添加这个时,它仍然不起作用;我得到的错误是它是一个静态的方法,所以无法解决。我根据stackoverflow的教程制作了这个应用程序。所以我不知道这个代码的位置。在这里,我上传了我在Git hub的项目,如果有人可以从项目文件中编辑并给我代码,这将对我意义重大。感谢Novo Lucas的慷慨努力。在我重置我的项目之前,我很好奇应该把第二行代码放在哪里,从private void initWebView到webView.setHorizontalScrollBarEnabledfalse;}。我是否需要在private boolean Is NetworkAvailable之后放置if{从我的初始代码开始,或者我需要将其放在上下文之前,正如您在代码中提到的webView.clearCachetrue;webView.clearHistory;,但是我希望缓存网页,以便用户即使在脱机时也可以阅读。我是否缺少一些内容。请帮助。是的,您可以在OnCreate.T之外的任何位置添加此方法我不知道我做错了什么,但我完全搞砸了。这是截图,请看一看。你让事情变得非常复杂,你需要先做一些基本的工作。彻底检查一下,首先试着做一些基本的实现WebView的应用