Cannot make a static reference to the non-static method

  • 33 Antworten
  • Letztes Antwortdatum
Status
Für weitere Antworten geschlossen.
P

PhillippOh

Fortgeschrittenes Mitglied
10
Hey,

in meiner App gibt es 4 Webviews, die man mit nem Slide zur Seite durchblättern kann. Wenn ein bestimmter Wert nicht gesetzt ist, sollen die Webviews nicht aktiviert werden sondern 2 TextViews angezeigt bzw mit Text versorgt werden.

Nun meckert er aber rum, fehler steht im Thementitel.

Hier mal mein Code mit den fehlerhaften Zeilen:

Code:
public static class DummySectionFragment extends Fragment {
		/**
		 * The fragment argument representing the section number for this
		 * fragment.
		 */
		public static final String ARG_SECTION_NUMBER = "section_number";
		
		

		public DummySectionFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main_dummy,
					container, false);
			
		
			int nummer = getArguments().getInt(ARG_SECTION_NUMBER);
			
			int currentWeek = new GregorianCalendar().get(Calendar.WEEK_OF_YEAR);
			int lastWeek = currentWeek - 1;
			int nextWeek = currentWeek + 1;
			int nextnextWeek = currentWeek + 2;
			
			[B]tvWelcomeTitel = (TextView) findViewById(R.id.tvWelcomeHead);
			tvWelcomeText = (TextView) findViewById(R.id.tvWelcome);[/B]
			
			String welcomeTitel = getString(R.string.welcome_titel);
			String welcomeText = getString(R.string.welcome_text);
			
			[B]String klassenid = getSharedPreferences("klasse", MODE_PRIVATE).getString("klasse", null);[/B]
			
			if(klassenid == null){
				[B]tvWelcomeTitel.setText(welcomeTitel + " ...");
				tvWelcomeText.setText(welcomeText);[/B]
			}else{
			
			mWebView = (WebView) rootView.findViewById(R.id.wvVPlan);
			mWebView.setInitialScale(100);
			
			if(nummer == 1) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+lastWeek+"/c/c00057.htm");}
			if(nummer == 2) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+currentWeek+"/c/c00057.htm");}
			if(nummer == 3) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextWeek+"/c/c00057.htm");}
			if(nummer == 4) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextnextWeek+"/c/c00057.htm");}
			
			
			}
			
			return rootView;
		}
	}

Nun komme ich nicht weiter bzw weiß nicht, wie ich das Problem lösen kann.

Hoffe jemand kann mir helfen.

Gruß
Phillipp
 
Ich rate jetzt einfach mal ins blaue hinein:

getSharedPreferences(), musst da nicht den Context angehen? Fragment erbt glaub ich nicht von einer Contextoberklasse. Wäre es ne Activity, dann würd es wohl schon gehen.

Wie gesagt, nur ins blaue hinein geraten, aber bei der Fehlermeldung nimmst du halt ne Klassenmethode her, welche nicht static is, d.h. du musst über das besitzende Objekt darauf zugreifen.
 
das bringt mir gerade nicht viel, weil ich jetzt auch nicht mehr weiß als vorher.
 
Den Context angeben? Den musst du dir dann natürlich auch woher holen und dann context.getSharedPreferences(..)

Wenns an dem liegt. Aber wenn ich so drüber schaue wirds wohl an dieser oder einer ähnlichen Methode liegen.
 
Logcat?

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Wie soll ich dir nen LogCat geben, wenn Eclipse mich die App nicht ausführen lässt?!
 
Mit dem Fehler wirds wohl kaum kompilieren.
 
Woher soll ich wissen wen du mit er meinst? Dein Nachbar?
Und in welcher Zeile meckert eclipse denn?

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
Ähm aso.
Warum deklarierst du deine Klasse als static? Das geht nicht.
 
das hat eclipse automatisch so gemacht. wenn ich das static weg nehme, schmiert die app ab, also wird das static schon iwie seinen sinn haben.
 
Ähm aso.
Warum deklarierst du deine Klasse als static? Das geht nicht.

Und die Fehler müsste es dir in der IDE ja eigentlich anzeigen oder ned? Wird ja gleich alles rot unterstrichen.
 
Der Fehler, den mir Eclipse anzeigt bei den markierten Zeilen auf der ersten Seite im Code, steht im Thementitel.

Genau gesagt ist das bei den TextViews: Cannot make a static reference to the non-static method findViewById(int) from the type Activity

Und das bei den SharedPreferences: Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper
 
Wenn du das static wegnimmst, kompiliert die App und schmiert ab. Wenn dus da lässt kompiliert sie nicht mal. Also wirds wohl die Ursache von dem Fehler sein oder nicht? Dass die App abschmiert (wenn sie denn mal kompiliert) hat dann andere Gründe.

Der ursprüngliche Beitrag von 22:29 Uhr wurde um 22:30 Uhr ergänzt:

Ja das geht eben nicht, weil Fragment nicht von Activity erbt. Also existieren diese Methode nicht in deiner Klasse.

Dein Fragment wird ja einer Activity hinzugefügt. D.h. du musst in deinem Fragment diese Activity referenzieren und dann kannst auch die Activity Methoden usw. benutzen mit activity.getSharedPreferences(..)
 
Nein, wenn ich die Textviews und die SharedPreferences Sachen alle wegnehme, dann funktioniert die App normal. Das static muss da also sein. Es liegt nur an folgenden Zeilen:

Code:
tvWelcomeTitel = (TextView) findViewById(R.id.tvWelcomeHead);
			tvWelcomeText = (TextView) findViewById(R.id.tvWelcome);
			
			String welcomeTitel = getString(R.string.welcome_titel);
			String welcomeText = getString(R.string.welcome_text);
			
			String klassenid = getSharedPreferences("klasse", MODE_PRIVATE).getString("klasse", null);
			
			if(klassenid == null){
				tvWelcomeTitel.setText(welcomeTitel + " ...");
				tvWelcomeText.setText(welcomeText);
			}else{
			
			mWebView = (WebView) rootView.findViewById(R.id.wvVPlan);
			mWebView.setInitialScale(100);
			
			if(nummer == 1) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+lastWeek+"/c/c00057.htm");}
			if(nummer == 2) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+currentWeek+"/c/c00057.htm");}
			if(nummer == 3) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextWeek+"/c/c00057.htm");}
			if(nummer == 4) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextnextWeek+"/c/c00057.htm");}
			
			
			}

Die if-Abfragen bei den webviews waren auch schon vorher da, also nur das if gerüst drum rum is auch neu.

Der ursprüngliche Beitrag von 22:31 Uhr wurde um 22:34 Uhr ergänzt:

und wie mache ich das nun genau?
 
Die Activity bekommst du mit getActivity().

D.h. getActivity().getSharedPreferences() usw.......
 
hmm, jetzt zeigt er zwar keine Fehler mehr an, aber die app schmiert beim ausführen ab.

Code:
tvWelcomeTitel = (TextView) getActivity().findViewById(R.id.tvWelcomeHead);
			tvWelcomeText = (TextView) getActivity().findViewById(R.id.tvWelcome);
			
			String welcomeTitel = getString(R.string.welcome_titel);
			String welcomeText = getString(R.string.welcome_text);
			
			String klassenid = getActivity().getSharedPreferences("klasse", MODE_PRIVATE).getString("klasse", null);
			
			if(klassenid == null){
				tvWelcomeTitel.setText(welcomeTitel + " ...");
				tvWelcomeText.setText(welcomeText);
			}else{
			
			mWebView = (WebView) rootView.findViewById(R.id.wvVPlan);
			mWebView.setInitialScale(100);
			
			if(nummer == 1) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+lastWeek+"/c/c00057.htm");}
			if(nummer == 2) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+currentWeek+"/c/c00057.htm");}
			if(nummer == 3) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextWeek+"/c/c00057.htm");}
			if(nummer == 4) {mWebView.loadUrl("http://vplan.jobelmann-schule.de/Schueler/"+nextnextWeek+"/c/c00057.htm");}
			
			
			}
 
Debuggen, Breakpoints setzen. Welche Fehlermeldung wird angegeben?

Das mit static Klasse hab ich mir jetzt mal angesehen. Stimmt schon, den Sinn versteh ich zwar jetzt grad nicht, warum das so gemacht wurde, aber naja.
 
Und wie soll ich debuggen? Seh ja nichtmal den LogCat weil Eclipse ihn iwie nich anzeigen will.

Der ursprüngliche Beitrag von 22:47 Uhr wurde um 22:51 Uhr ergänzt:

gut, ich glaube ich habs raus. Wenn ich die if Abfrage if(klassenid == null){ komplett raus nehme und nur noch den inhalt mit den webviews da lasse, dann gehts. wenn ich die if abfrage raus nehme und auch das setText() von den beiden textviews drin lasse, dann schmiert die app ab. weißt du vllt woran es noch liegen kann? es sind ja anscheinend die beiden setText()
 
...
How to Debug Android application line by line using Eclipse? - Stack Overflow

Vmtl gibts ne NullPointerException. tvWelcomeTitel oder tvWelcomeText wird null sein oder einer der strings die du bei beiden setzen willst.

Der ursprüngliche Beitrag von 22:53 Uhr wurde um 22:58 Uhr ergänzt:

Wenn dus debugst müssts dich da eigentlich wo mit nem Fehler rausschmeißen und du siehst gleich wo es hängt. Mit ausprobieren wirst da bei größeren Projekten ziemlich lang dafür brauchen.
 
Iwas stimtm auch mit der Abfrage nicht. Da in den preferences schon was gespeichert ist, sollten die Webviews angezeigt werden, aber sie werden nicht angezeigt. Sehr komisch.

Der ursprüngliche Beitrag von 23:03 Uhr wurde um 23:14 Uhr ergänzt:

Ok, die if Abfrage habe ich zum laufen bekommen indem ich den wert aus den preferences im oncreate der activity in die die variable speichere die dann auf public static gestellt ist. das problem mit den textviews hab ich aber weiterhin.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten