Android 编译时出现空指针异常
我已经从android stuido开发了一个简单的webview应用程序,它将在联机时加载页面的url,并在脱机时显示缓存文件。但是我得到了一个恒定的误差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
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的应用