2017-08-05 32 views
0

Ich habe durch viele Post und Foren gegangen, konnte aber keine Lösung finden. Ich entwickle eine Anwendung mit lokalen HTML-Dateien in, für die habe ich diese HaupttätigkeitVariable Ansicht möglicherweise nicht initialisiert und Variablenansicht von Innenansicht

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

}

Hier in Zeile

WebView webView = (WebView) findViewById(webView); 

Ich bin Fehler von webView bekommen könnte nicht initialisiert worden und in Zeile

Variable WebView wird von Innter Klasse Whi zugegriffen ch muss endgültig erklärt werden und so, wenn ich Code zu diesem

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

immer noch kein Glück zu ändern.

und meine Main_activity Datei ist

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

jemand mir dabei helfen kann, was muss ich es funktioniert zu tun.

Antwort

0

Es scheint, dass Sie eine Variable des Typs WebView innerhalb der Hauptklasse deklarieren, kurz vor der goBack()-Funktion. In der Zeile:

WebView webView = (WebView) findViewById(webView); 

Sie erklären und eine neue lokale Variable initialisieren, der Wert wird am Ende der onCreate verloren. Darüber hinaus ist das Argument webView ein Klassenmember, der nicht in Ihrem Code initialisiert wird, deshalb warnt der Compiler Sie.

Beachten Sie, dass webView in Ihrer anonymen inneren Klasse bezieht sich auf das Klassenmitglied, nicht für die lokale Variable, so müssen Sie es richtig initialisieren und es final machen.

+0

Wie soll ich es endgültig machen. Wo sollte ich welchen Code setzen, um es dann endgültig zu machen? –

0

findViewById nimmt eine ganze Zahl ist, in der Linie,

WebView webView = (WebView) findViewById (webView);

Was die webView ist, wo Sie diese Variable initialisiert haben, sollten Sie wie int webView= R.id.webView; initialisiert

Sie sind die gleichen mistale findViewById(webView).setVisibility(View.VISIBLE);

Initialisieren der Webansicht wie WebView webView = (WebView)findViewById(R.id.your_web_view); hier tun und dann verwenden.

+0

Danke für das Aufzeigen eines großen Lecks. Ich bin neu in Coding und das alles ... im Moment habe ich es nur geschafft, eine Anwendung mit Hilfe von Foren und Bloggern zu entwickeln. Es wäre beeindruckend, wenn Sie sagen könnten, wie mein Code aussehen soll. Ich würde es wirklich schätzen und ich könnte wieder so viel lernen. –

+0

In Ihrem 'activity_main' XML sollte WebView sein, also setzen Sie eine ID wie' android: id = @ + id/myWebView' und verwenden Sie dieses 'WebView webView = (WebView) findViewById (R.id.myWebView);' –

+0

Entschuldigung, ich habe meine Datei main_activity.xml nicht eingeschlossen ...Jetzt habe ich meine Frage editiert. Wie ich schon ID gesagt habe, soll das nicht funktionieren ?? –

Verwandte Themen