Code auf Klasse verlegen - Mission gescheitert

M4RC2

Mitglied
Hallo Coders,

ich habe nun an meiner App weitergeschrieben und da hat sich herausgestellt, dass ich unbedingt nun Klassen zur Übersichtlichkeit brauche! Vorallem, wenn jetzt eine Menge Code dazukommt...

Nur habe ich da wohl falsch gedacht:
Der Code in der App sieht so aus: (App funktioniert auch so)

Java:
    public void setsettings(View view){
    	RadioGroup g = (RadioGroup) findViewById(R.id.radioSex); 
    	int selected = g.getCheckedRadioButtonId();
    	RadioButton b = (RadioButton) findViewById(selected);
    	String eingabe = (String) b.getText();
    	String male = "Männlich";
    			
    	if(eingabe.equals(male)){
    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Männlich").commit();
    	} else {
    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Weiblich").commit();
    	}
    	
    	//Jahre
    	EditText et = (EditText)findViewById(R.id.yearsid);
    	int jahre = Integer.parseInt(et.getText().toString());
    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("years", jahre).commit();
    	
    	//Größe
    	EditText etg = (EditText)findViewById(R.id.groseid);
    	int grose = Integer.parseInt(etg.getText().toString());
    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("cm", grose).commit();
    	
    	//Gewicht
    	EditText etgw = (EditText)findViewById(R.id.gewicht);
    	int gewichtvar = Integer.parseInt(etgw.getText().toString());
    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("gewicht", gewichtvar).commit();
    
    	setContentView(R.layout.activity_main);
    	calc();
    }

Also einfach eine Funktion die Informationen speichert und dann eine andere Funktion wieder ausführt (calc()).

Nun ich habe meine "Klassen" in PHP einfach via "include" eingefügt.. Das war eine Zeile und schnell erledigt.. Hier bekomme ich nurnoch Fehler.
Die Funktion setsettings wird übrigens über einen XML-Button aufgerufen (OnClick).

Ich bin das Ganze so angegangen:

In die MainActivity habe ich noch ein "import" gepackt:
Java:
import m4rc.de.dichtometer.Settings;

Dann habe ich aus diesem Import die Klasse erstellt:
Java:
package m4rc.de.dichtometer;

import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class Settings {
	public Settings() {
	    public void setsettings(View view){
	    	RadioGroup g = (RadioGroup) findViewById(R.id.radioSex); 
	    	int selected = g.getCheckedRadioButtonId();
	    	RadioButton b = (RadioButton) findViewById(selected);
	    	String eingabe = (String) b.getText();
	    	String male = "Männlich";
	    			
	    	if(eingabe.equals(male)){
	    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Männlich").commit();
	    	} else {
	    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Weiblich").commit();
	    	}
	    	
	    	//Jahre
	    	EditText et = (EditText)findViewById(R.id.yearsid);
	    	int jahre = Integer.parseInt(et.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("years", jahre).commit();
	    	
	    	//Größe
	    	EditText etg = (EditText)findViewById(R.id.groseid);
	    	int grose = Integer.parseInt(etg.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("cm", grose).commit();
	    	
	    	//Gewicht
	    	EditText etgw = (EditText)findViewById(R.id.gewicht);
	    	int gewichtvar = Integer.parseInt(etgw.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("gewicht", gewichtvar).commit();
	    
	    	setContentView(R.layout.activity_main);
	    	calc();
	    }
	
    }
    
}

Wie man sehen kann, voller Fehler!
sc1.jpg


Wie kann findbyview wieder die variable finden? ("MODE_PRIVATE cannot be resolved to a variable")
Was ist das Problem bei getsharedpreferences mit MODE_PRIVATE ("MODE_PRIVATE cannot be resolved to a variable")?
Was bedeutet bei setcontentview: "The method setContentView(int) is undefined for the type Settings"?
wieso funktionert void bei setsettings nichtmehr: "void is an invalid type for the variable setsettings"?
Wie kann ich die Funktion calc() aus der MainActivity wieder aus dieser Klasse starten?


Ich danke für eure Hilfe im vorraus 😉


Marc
 
die Methode
Java:
public setSetings(View view)
gehört nicht in den Konstruktor der Klasse.
Du kannst ein Objekt der Klasse Main erzeugen um auf die calc() Funktion zu zugreifen.
 
Das ist Android,
Code:
findViewById();
funktioniert nur wenn du diese klasse von
Code:
Activity
ableitest, da dort diese Methode existiert.

Java:
public class settings extendes Activity {
  //.....
}

Zudem musst du diese als activity in die Manifest Datei eintragen.
 
Zuletzt bearbeitet:
Hat alles wunderbar funktioniert, bis auf das erzeugen des Objektes! Ich möchte festhalten, dass ich soetwas mit Java noch nie gemacht habe!
Nochmal danke für eure hilfreichen Antworten!
Der Code sieht so aus:
Java:
package m4rc.de.dichtometer;

import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class Settings extends Activity{
	Settings2 = new Settings();
	
	public Settings() {

	
    }
    public void setsettings (View view){
	    	RadioGroup g = (RadioGroup) findViewById(R.id.radioSex); 
	    	int selected = g.getCheckedRadioButtonId();
	    	RadioButton b = (RadioButton) findViewById(selected);
	    	String eingabe = (String) b.getText();
	    	String male = "Männlich";
	    			
	    	if(eingabe.equals(male)){
	    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Männlich").commit();
	    	} else {
	    		getSharedPreferences("settings", MODE_PRIVATE).edit().putString("sex", "Weiblich").commit();
	    	}
	    	
	    	//Jahre
	    	EditText et = (EditText)findViewById(R.id.yearsid);
	    	int jahre = Integer.parseInt(et.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("years", jahre).commit();
	    	
	    	//Größe
	    	EditText etg = (EditText)findViewById(R.id.groseid);
	    	int grose = Integer.parseInt(etg.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("cm", grose).commit();
	    	
	    	//Gewicht
	    	EditText etgw = (EditText)findViewById(R.id.gewicht);
	    	int gewichtvar = Integer.parseInt(etgw.getText().toString());
	    	getSharedPreferences("settings", MODE_PRIVATE).edit().putInt("gewicht", gewichtvar).commit();
	    
	    	setContentView(R.layout.activity_main);
	    	Settings2.calc();
	  }
}

Ich bekomme einen Fehler bei
Java:
Settings2 = new Settings();
Syntax error on token "Settings2", VariableDeclaratorId expected after this token

Und natürlich dann auch bei
Java:
Settings2.calc();
Settings2 cannot be resolved


Ich wette die Lösung ist mal wieder sooo einfach -_- Dennoch stehe ich nun seit einer Stunde auf dem Schlauch....


Danke nochmal, Marc
 
Ich bekomme einen Fehler bei
Java:
Settings2 = new Settings();
Syntax error on token "Settings2", VariableDeclaratorId expected after this token

.... VariableDeclaratorId expected after this token


Generell bin ich mir nicht sicher was deine Klasse Settings machen soll? Soll diese wirklich eine Activity sein? Oder nur Daten halten?

Und natürlich dann auch bei
Java:
Settings2.calc();
Settings2 cannot be resolved

Das ist klar, du hast keine Klassenvariable "Settings2" definiert, bzw. das was du oben definiert hast hat keinen Typ -> Syntax ist falsch!

Ich würde eher wieder zu den Grundlagen von Java und Android Programmierung zurück kehren und dein Programm stück für Stück erweitern.
 
Zur Objektinstanziierung:
ändere
Java:
Settings2 = new Settings();
in
Java:
Settings settings2 = new Settings();
Klasse objektname = new Klasse(); (Klasse() => Konstruktoraufruf)

Merke: Objektnamen/Variablennamen immer klein geschrieben (Anfangsbuchstaben), Klassennamen immer Groß.
 
Zuletzt bearbeitet:
.... VariableDeclaratorId expected after this token


Generell bin ich mir nicht sicher was deine Klasse Settings machen soll? Soll diese wirklich eine Activity sein? Oder nur Daten halten?



Das ist klar, du hast keine Klassenvariable "Settings2" definiert, bzw. das was du oben definiert hast hat keinen Typ -> Syntax ist falsch!

Ich würde eher wieder zu den Grundlagen von Java und Android Programmierung zurück kehren und dein Programm stück für Stück erweitern.

Ja sie soll eine Activity sein, da sie ja Dinge ändert und speichert... Ich arbeite paralell natürlich immer an den Java Grundlagen weiter, aber allein die Grundlagen zu lernen ist mir "zu langweilig"... 😛

Dennoch, was ist dann der Fehler?
 

Zurück
Oben