-2

私はアンドロイドスチュードから、オンライン時にページのURLを読み込み、オフライン時にキャッシュファイルを表示する簡単なwebviewアプリを開発しました。しかし、私はコンパイル時のヌルポインタの例外

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) 

の一定のエラーを取得し、以下、私はコンテキストがあると思い

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"/> 

を.javaファイルMainactivityからの私のコードですよ問題を引き起こしますが、解決方法はわかりません。 ヘルプは大歓迎です。

<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> 

+2

可能な重複を見て

private class MyWebChromeClient extends WebChromeClient { Context context; public MyWebChromeClient(Context context) { super(); this.context = context; } } 

を/stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Selvin

答えて

0

私は何かが足りないのですか? ここの行はnullで、あなたはそれをWebビューに渡します。

Context context = null;

このような何か試してみてください:

のWebViewのWebViewを=新しいのWebView(getApplicationContext());

+0

デビッドに感謝してくれました。ありがとうございました。私は行を削除しました Context context = null; WebView webView =新しいWebView(コンテキスト)。と置き換えられました\t 私に何かが不足していますか?ここの行はnullで、あなたはそれをWebビューに渡します。 コンテキストcontext = null; 次のように試してください。 WebView webView = new WebView(getApplicationContext());しかし、今ではアプリには何も表示されず、「www.sagarrawal.com.np」というURLを「www.google.com」に置き換えた場合、Webブラウザではなくインターネットのインターネットブラウザから表示されます。 –

0

ダビデが述べたようにこれはOnCreate関数

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

とinitWebViewための()であるヌルコンテキストに

を渡しません。 MyWebChromeClientについては

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); 
} 

これを行う:/:また[?何NullPointerExceptionがある、と私はそれをどのように修正すればよい](HTTPSのこのreference- link

+0

私はあなたの提案の人に本当に感謝していますが、それでも私はOnCreateでこれを追加します。 webView.setWebViewClient(new WebViewController());私はそれのエラーを得る静的な方法ですので、解決することはできませんでした。私はこのアプリをstackoverflowのチュートリアルの後に作った。だから私はこのコードの配置を知らない。ここで私はGitのハブで自分のプロジェクトをアップロードしました。誰かがプロジェクトファイルから編集してコードを私に渡すことができれば、私にとっては大変意味があります。https://github.com/BlueYeti1881/CDPRoutine000 –

+0

あなたの寛大な努力のためにNovo Lucasに感謝します。私は自分のプロジェクトをリセットする前に、private void initWebView()からwebView.setHorizo​​ntalScrollBarEnabled(false)の2行目をどこに置くべきか興味がありました。 }。 のprivate boolean isNetworkAvailable(){最初のコードから取得する必要がありますか、コンテキストの前に配置する必要がありますか、webView.clearCache(true)を記述しておく必要があります。 webView.clearHistory();あなたのコードでは、しかし、私はあなたがオフラインであっても、ユーザーがまだ読むことができるようにWebページをキャッシュします。私はここに何かを忘れていますか助けてください。 –

+0

はい、このメソッドはOnCreateの外のどこにでも追加できます。試して、webVIewが最初にロードされているかどうかを確認してください。キャッシングを行うことができます –