2010-12-30 2 views
2

Ich baue eine Android-App und ich habe eine Warnung, die keine Probleme verursacht, aber wenn ich eine Warnung sehe, möchte ich zumindest wissen, was es verursacht. Die App verwendet eine Webansicht.Das statische Feld view.GONE sollte statisch aufgerufen werden?

Hier ist das Bit, wenn Code, der die Warnung verursacht.

ImageView viewSplash; 
WebView mWebView; 
@Override 
public void onCreate(Bundle icicle) { 

    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    viewSplash = (ImageView) findViewById(R.id.splash); 
    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.getSettings().setGeolocationEnabled(true); 
    mWebView.loadUrl("http://www.google.com"); 
    mWebView.setWebViewClient(new WebViewtest(){ 
     @Override 
     public void onPageFinished(WebView View, String url) 
     { 
      viewSplash.setVisibility(View.GONE); 

       } 
    }); 
} 

Dies ist der Fehler:

statisches Feld View.GONE in einer statischen Art und Weise zugegriffen werden soll.

+0

Eine Erläuterung der Bedeutung der Fehlermeldung finden Sie unter http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html. Beachten Sie, dass es heißt: "Sie können auch auf statische Methoden mit einer Objektreferenz wie instanceName.methodName (args) verweisen, aber dies wird abgeraten, weil es nicht klar, dass sie Klassenmethoden sind." In diesem Fall sprechen sie über statische Methoden anstelle von statischen Feldern, aber es ist die gleiche Idee, und aus dem gleichen Grund wird davon abgeraten. – MatrixFrog

Antwort

9

Nun, ich ein Problem sehen kann, die vielleicht relevant sein. Sie haben eine Großanzeige als Argumentnamen (siehe). Unkapitalisiert dies.

Edit: Das Problem war der Argumentname, der die falschen Obergrenzen ist, und maskiert den Klassenzugriff mit einem Instanzvariablenzugriff, weshalb Sie den Fehler erhalten haben. Die bessere Lösung wäre, die Großschreibung zu sortieren.

+0

Wenn ich diese Änderung machte, gab es mir einen Fehler, dass "Ansicht kann nicht in eine Variable aufgelöst werden" –

+0

Weil Sie View nicht ordnungsgemäß importiert hatten. Sie sollten nicht auf diese Weise mit dem vollständigen Klassenpfad darauf zugreifen müssen (mit einem qualifizierten Paketnamen). Verwenden Sie Eclipse, implementieren Sie meine Änderung, und drücken Sie STRG-LEERTASTE auf das View-Bit von View.GONE. Blättern Sie zu dem Eintrag und dieser wird importiert. Oder drücken Sie STRG-O, wenn Sie Importfehler haben, und wählen Sie das richtige Paket zum Importieren (android.view.View). Oder schieben Sie einfach android.view.View; am Anfang der Datei. –

+0

Ist es nicht Strg-SHIFT-O? – MatrixFrog

2

Ok gerade nach diesem Posting ich die Warnung feste ...

ich dies geändert:

viewSplash.setVisibility(View.GONE); 

dazu:

viewSplash.setVisibility(android.view.View.GONE); 
+0

Wenn das das Problem behoben hat, dann ist 'View' vielleicht etwas anderes als die' android.view.View' Klasse. Sehen Sie in Ihrem Code nach, ob Sie versehentlich eine Variable namens "View" benannt haben. In Java sollten Klassennamen immer mit einem Großbuchstaben beginnen, und Variablennamen beginnen mit einem Kleinbuchstaben. – MatrixFrog

+0

Gerade bemerkt, es ist direkt in den Argumenten: 'WebView View'. Ändern Sie sie in "WebView-Ansicht", und Sie müssen dann nicht mehr auf die Klasse "View" mit ihrem vollständig qualifizierten Namen verweisen. – MatrixFrog

1

Die Konstante View.GONE oder (in meinem Fall) Context.NOTIFICATION_SERVICE sind Konstanten innerhalb der Klasse Context, auf die nicht über einen lokalen Kontext oder View zugegriffen werden soll. Der Fehler besteht also darin, anstelle der View.gone etwas oder anderes.GONE zu referenzieren.

Verwandte Themen