2016-12-01 33 views
1

アプリを起動するときにWebViewがURLを読み込む前に.png画像を読み込もうとしています。ここでは同じのための私のJavaコードは次のとおりです。次のようにWebViewでURLを読み込む前に画像を読み込むことができません

package course.org.mywebsite; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 


    WebView mWebView; 
    ImageView logo; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     final Activity mActivity = this; 
     this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
     super.onCreate(savedInstanceState); 

     logo = (ImageView) findViewById(R.id.logo); 
     setContentView(R.layout.activity_main); 

     getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(MyURLHere); 

     mWebView.setWebChromeClient(new WebChromeClient() { 

      public void onProgressChanged(WebView view, int progress) { 
       //Make the bar disappear after URL is loaded, and changes string to Loading... 
       mActivity.setTitle("Loading..."); 
       mActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded 

       logo.setVisibility(View.VISIBLE); 


       if(progress == 100) { 
        mActivity.setTitle(R.string.app_name); 
        logo.setVisibility(View.GONE); 

       } 
       } 


     }); 


    } 
} 

マイレイアウトファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
<ImageView 
    android:id="@+id/logo" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:visibility="invisible" 
    android:src="@drawable/logo"/> 

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

私はアプリを実行すると、それが次のエラーでクラッシュ:

FATAL EXCEPTION: main               
    Process: course.org.mywebsite, PID: 22730 

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setVisibility(int)' on a null object reference                   
    at course.org.sensoredlife.MainActivity$1.onProgressChanged(MainActivity.java:52)                  
    at com.android.webview.chromium.WebViewContentsClientAdapter.onProgressChanged(WebViewContentsClientAdapter.java:239) 
    at org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:169) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

この特定のコード行を参照してください:

logo.setVisibility(View.VISIBLE); 

私はここで何が欠けていますか?私はすでにイメージを 'logo'変数に割り当てておき、URLロードの進行中にイメージを設定しています。

+1

findViewById – TameHog

答えて

2

以下のロゴの割り当てを移動する必要があります。setContentView(R.layout.activity_main); ビューはこのメソッド呼び出し後までメモリに存在しません。

 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    logo = (ImageView) findViewById(R.id.logo); 

+0

Ahを使用してビューを取得する前に、常にコンテンツビューを設定する必要があります。愚かな間違い、ありがとう! – 221b

関連する問題