2017-08-05 103 views
0

我已經通過大量帖子和論壇,但找不到解決方案。我正在開發與本地HTML文件的應用程序中的我已經這一項主要活動變量視圖可能沒有初始化並且從內部視圖訪問變量視圖

package com.faraksoch.sagar.eroutine; 



public class MainActivity extends AppCompatActivity { 
boolean doubleBackToExitPressed = false; 


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


    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setAppCacheEnabled(true); 
    webView.getSettings().setSupportZoom(true); 
    webView.getSettings().setAllowFileAccess(true); 


    webView.setWebViewClient(new WebViewClient() { 


     public void onPageFinished(WebView view, String url) { 
      findViewById(R.id.image1).setVisibility((View.GONE)); 
      findViewById(webView).setVisibility(View.VISIBLE); 


     } 
    }); 


    webView.loadUrl("file:///android_asset/index.html"); 

    webView.setDownloadListener(new DownloadListener() { 
     public void onDownloadStart(String url, String userAgent, 
            String contentDisposition, String mimetype, 
            long contentLength) { 
      Intent i = new Intent(Intent.ACTION_VIEW); 
      i.setData(Uri.parse(url)); 
      startActivity(i); 
     } 
    }); 

    Intent intent = new Intent(MainActivity.this, UpdateService.class); 
    startService(intent); 
} 

boolean doubleBackToExitPressedOnce = false; 

@Override 
public void onBackPressed() { 
    if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     return; 
    } 

    this.doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, "Please click BACK again to exit", 
      Toast.LENGTH_SHORT).show(); 

    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce = false; 
     } 
    }, 2000); 


} 
WebView webView; 
public void goBack(){ 
    if (webView.canGoBack()) { 
     webView.goBack(); 
    } else { 
     finish(); 
    } 
} 

}符合

這裏

WebView webView = (WebView) findViewById(webView); 

我得到web視圖的錯誤可能尚未初始化並在線

findViewById(webView).setVisibility(View.VISIBLE); 

變量webView是從innter類訪問whi ch需要聲明爲final,因此當我將代碼更改爲此時,

final WebView webView = (WebView) findViewById(webView); 

仍然沒有運氣。

和我Main_activity文件

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.faraksoch.sagar.eroutine.MainActivity"> 

<WebView 
    android:id="@+id/webView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="gone" 
    /> 


<ImageView 
    android:id="@+id/image1" 
    android:layout_width="368dp" 
    android:layout_height="576dp" 
    android:background="@drawable/ssplash" /> 

</android.support.constraint.ConstraintLayout> 

誰能幫我這個問題,我必須做什麼,使其工作。

回答

0

看起來您正在聲明主類中的WebView類型的變量,在goBack()函數之前。在行:

WebView webView = (WebView) findViewById(webView); 

您聲明並初始化其值在onCreate到底是失去了一個新的局部變量。此外,參數webView是一個未在代碼中初始化的類成員,這就是編譯器警告你的原因。

注意,在你的匿名內部類,webView指類的成員,不爲局部變量,所以你必須正確初始化它,讓它final

+0

我該如何做到最後。我應該在哪裏放置什麼代碼才能最終完成? –

0

findViewById取整數,在您的線路,

web視圖web視圖=(web視圖)findViewById(web視圖);

什麼是webView這裏有你初始化這個變量,你應該初始化像int webView= R.id.webView;

你正在做同樣的mistale這裏findViewById(webView).setVisibility(View.VISIBLE);

初始化的WebView像WebView webView = (WebView)findViewById(R.id.your_web_view);,然後使用它。

+0

感謝您指出重大泄漏每個人。我對Coding和所有這些都是新手......現在,我只能在論壇和博主的幫助下開發出一個應用程序。如果你能評論我的代碼應該是什麼樣子,那將是令人印象深刻的。我真的很感激,我可以再次學習。 –

+0

在您的'activity_main' XML中應該有WebView,以便爲'android:id = @ + id/myWebView'設置一個id,現在使用這個'WebView webView =(WebView)findViewById(R.id.myWebView) –

+0

抱歉,我沒有包含我的main_activity.xml文件...現在我已經編輯了我的問題。正如我已經宣佈身份證,是不是應該工作? –