Kann nicht aus anderer Methode auf das Feld in onCreate zugreifen : / (WARUM ?) :D

  • Antworten:48
  • Bentwortet
Flondy
  • Forum-Beiträge: 45

25.11.2014, 14:40:44 via Website

Hallo ich habe folgenden code :

"
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

   // Findet die jeweiligen Elemente per findViewById
    EditText Feld1 = (EditText)findViewById(R.id.ename1);
    EditText Feld2 = (EditText)findViewById(R.id.ename2);
    TextView Feldquote = (TextView)findViewById(R.id.equote);
}

public void generatequote(View view){
String testString = "blablabubber";
Feld1.setHint(testString);
}

"

Und ein Button auf meinem main.xml führt die methode generatequote aus :D aber ich kann die app so nicht ausführen da eclipse bemangelt in der generate methode das es kein Feld1 gibt ... warum hat meine generate methode kein Zugriff auf das im onCreate deklarierte Feld1 ? : / das blöde ist wenn ich die drei zeilen in die generatemethode schreibe dann werden die ja erst deklariert (die Felder) wenn auf den Button gedrückt wird oder ? ... also wenn ich das so mache kann ich meine app wenigsten kompilieren und starten sie stürzt aber ab sobald ich den button drücke ... und ehm ja das will ich eig auch net so machen weil ichs gern im onCreate hätte damit ich mehre Sprachen unterstützen kann und beim laden der app im oncreate die jeweiligen strings setze ^^.

Wäre mega nett wenn mir da jemand helfen bzw. mich aufklären könnte :)

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

25.11.2014, 14:43:14 via Website

Du musst die Variablen schon vor der onCreate (ich glaube es heißt so) deklarieren, sonst sind die Felder nur in der onCreate "benutzbar".
Also vor der onCreate():
EditText feld1;

und in der onCreate():
feld1 = ...

— geändert am 25.11.2014, 14:53:27

Flondy

Antworten
Flondy
  • Forum-Beiträge: 45

25.11.2014, 14:56:57 via Website

Okay vielen vielen Dank ! :)

Antworten
Fabian
  • Forum-Beiträge: 144

26.11.2014, 10:15:29 via App

Mal anders ausgedrückt, du kannst eine Variable nur in dem definierten Codeblock sehen. Bedeutet, wenn du in der Klassendefinition eine Variable deklarierst, wird sie als global bezeichnet, weil sie in der gesamten Klasse sichtbar ist. In einer Methodedeklaration wird eine deklarierte Variable auch als lokal bezeichnet, weil sie eben nur innerhalb der Methode sichtbar ist.
In deinem Fall, wie mein Vorposter schon erwähnt hat, deklarierst du die Variable global und weist ihr innerhalb der onCreate einen Wert zu, damit du auch außerhalb dieser Methode Zugriff darauf hast ;)

Grüße Fabian!

Antworten
Fabian Simon
  • Forum-Beiträge: 359

26.11.2014, 12:41:09 via Website

Schaue dir hierzu auch die Themen Sichtbarkeit und Kapseln an.
Denn der Wertebereich wird auch noch durch deren "vorzeicheien" definiert.

Als Stichwort noch public, private, protected bzw. Lokal und globale Variabeln. --> Auch static und final usw.

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 17:47:30 via Website

Also tut mir echt mega leid ... keine Ahnung warum ich zu blöd dafür war eigentlich hätte mir das kar sein müssen :D ich hab bereits gute C++ Kentnisse und naja ich hätte mir das davon ableiten können eig. sorry.

Aber mal ne andere Frage die viel wichtiger ist für mich im Moment :

Wenn ich jetzt z.b. das deklarieren eines Buttons/TextViews oder auch eines EditTextViews und die Zuweisung zur zugehörigen ID trennen will die Deklaration in die Klasse und die Zuweisung in die OnCreate Methode ? Wie mache ich das dann am besten ?

Also ich habs ja so geschrieben zusammenhängend :

" EditText Feld1 = (EditText)findViewById(R.id.ename1);
EditText Feld2 = (EditText)findViewById(R.id.ename2);
TextView Feldquote = (TextView)findViewById(R.id.equote);
Button MoreButton = (Button)findViewById(R.id.moreButton);"

Aber wenn ich das jetzt trennen will in Deklaration und Zuweisung bzw Initalisierung dann müsste das doch irgendwie so aussehen oder ?^^ :

public EditText Feld1;
public EditText Feld2;
public TextView Feldquote;
public Button MoreButton;

(In der Klasse deklariert)

Und dann in der OnCreate Methode so in der Art :

Feld1 = (EditText)findViewById(R.id.ename1);
Feld2 = (EditText)findViewById(R.id.ename2);
Feldquote = (TextView)findViewById(R.id.equote);
MoreButton = (Button)findViewById(R.id.moreButton);

Gibts dafür nicht irgendwie auch ne Documentation ? : / die gut übersichtlich und leicht verständlich ist ?

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 17:49:04 via Website

Wäre mega netzt wenn auf die Schnelle jemand antworten könnt :D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.11.2014, 17:50:41 via App

Also es gibt schon eine Doc: https://developer.android.com/guide/index.html

Ob diese leicht verständlich ist musst du sehen.
Meistens lassen sich Probleme auch ergooglen oder nach Codeabschnitten suchen. Wenn du nichtnweiter weisst einfach Fragen :)

LG Pascal //It's not a bug, it's a feature. :) ;)

Flondy

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 17:53:27 via Website

Muss ich so ein Element überhaupt als public deklarieren wenn ich innerhalb der Klasse deklariere und nicht innerhalb einer Methode ?

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 17:56:55 via Website

Ich hätte noch eine Frage ... bei mir ist der komplette Code in der Activity immer bei den R. rot unterzeichnet bzw angeblich sollen das alles Errors sein ... ich hatte das schon öfters in Eclipse ? Was mach ich da falsch >.< ??

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.11.2014, 18:02:45 via Website

  1. Feld muss nicht als public declariert werden. Kann auch private sein.
  2. Das ist ein Fehler in Ecleipse.
    Normalerweise ist etwas mit den Resources/Imports falsch oder Eclipse hat sich verschluckt.
    Falls es sich nur verschluckt hat, dann hilft ein Project->Clean + Rebuilt

LG Pascal //It's not a bug, it's a feature. :) ;)

Flondy

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 18:09:18 via Website

Okay danke und das mit den drawables Ordnern ? : / Ich möchte gern meine Bilddateien abm besten in nem seperaten drawable Ordner oder geht das garnicht ? Weil er mir ja sagt invalid resource directory name wenn ich nen drawable-flondystuff Ordner unter res hinzuüge

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 19:00:21 via Website

Mhm okay danke mal ... ! :)

Ich bin so frustriert langsam ... ich krieg das mit diesem R. errors einfach nicht weg ... >.< ... jetzt krieg ich auch noch Errors in meinem string.xml´s angezeigt wie das hier www -> dropbox.com/s/qa53bc9kezpge2e/Screenshot%202014-11-26%2018.58.06.png?dl=0 ... es is so mega frustrierend ... bin ich echt zu blöd dazu ? Ich mein Spiele in Unity krieg ich doch auch gebacken ... wobei ich echt find das das viel viel einfacher is .... oder ich geh die Sache komplett falsch an ... oder liegts an Eclipse ? Is das mit Android Studio komfortabler ? Ich zweifel langsam echt :(

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.11.2014, 19:07:15 via App

Mit Android Studio solltest du nicht von Anfang an Probleme mit R.java haben.
Die Probleme in der string.xml können unabhängig davon sein.

— geändert am 26.11.2014, 21:30:30

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.11.2014, 19:08:06 via Website

poste doch einfach mal deinen Code, dann ists einfacher zu sagen was der Fehler ist.
PS: project->Clean probiert? ;)

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 19:58:43 via Website

Okay ich glaub ich habs jetzt langsam gefressen hab jetzt einfgach mal den kompletten code per toggle comment und bulid n run "debuggt" und geschaut was geht und was nicht :D ohman haha jetzt hab ich aber trzd noch ne Frage und zwar wenn ich ne App mit nem EditTextView hab und dann build n run mach dann zeigt er mir sofort die Tastatur an um was einzugeben aber das möchte ich nicht ich will erst das er die anzeigt wenn ich das Feld anklicke ... : / wie mach ich das ? :D

Antworten
Sven R.
  • Forum-Beiträge: 1.904

26.11.2014, 21:32:28 via App

Das View hat den Fokus, Google mal danach. Einfach den Fokus auf ein anderes View machen oder vielleicht wenn das geht keinen Fokus setzen.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Flondy

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 21:45:19 via Website

Okay kleine Frage ... kann ich Eclipse sagen das das "build automaticly" nur z.b. bei der google-play-services-lib an sein soll ? weil ich hab echt viele Projecte in meinem Workspace und möchte eig lieber immer einzeln "builden" damit bekomm ich dann auch nur die errors in der console die mich auch interessieren im Moment ... denk ich ... also wenn das geht : / ?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.11.2014, 21:55:31 via App

Also 1. Fertige Libs als .JAR musst/kannst du nicht builden

  1. Um dieses Problem zu lösen gibt es in eclipse eine Funktion im ProjectExplorer auf dein ignorierendes Projekt - rechtsclick -> close project. Dann kommen von diesem keine Errors und warnungen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flondy
  • Forum-Beiträge: 45

26.11.2014, 23:09:33 via Website

:o hä weil also ich hatte bis jetzt halt immer den kompletten ordner google-play-services-lib in eclipse un dweil ich build automaticly an hatte hat er mir das immer mit "gebuilded" ^^^sorry kenne kein deutsches Wort dafür haha :D und ich hatte es halt immer in preferences als "is library" und dann in meinen apps immer auch in preferences-> android unter libraries hinzugefügt und das ging ^^ gibts da nen einfacheren weg wo das project nicht immer neu gebuilded wird ?

Sorry für die Rechtschreibung bin mega müde hoffe ihr könnt mir verzeihen und versteht trzd was ich meine ^^

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.11.2014, 06:58:44 via App

Ja du kannst die .jar die schon fertig kompiliert ist direkt einbinden. Einfsch mal suchen im Inet.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

27.11.2014, 07:05:59 via App

Und da sage ich wieder, dass Android Studio in diesem Fall besser ist. Es beinhaltet nämlich Gradle.
Dort müsstest du nur sowas wie

compile(supportlivrary:+)

eingeben und Gradle lädt für dich die Library in der angegebenen Version ausm Internet runter und bindet sie richtig ein.

— geändert am 27.11.2014, 07:06:14

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Flondy
  • Forum-Beiträge: 45

27.11.2014, 10:46:43 via Website

Mhm okay ja weiß nicht will irgendwie doch bei Eclipse bleiben vll hab ich mich irgendwann so hineinvertieft das ich besser hiermit klar komme :D

Also zu dem Library einbinden in Eclipse ... ich hab jetzt nochmal geschaut ... und google schreibt es auch so das man des komplette project in den workspace kopierern soll ... hier -> http:// developer.android.com/google/play-services/setup.html

Aber mir wäre das schon lieber wenn ich das Project nur kurz bei jeder app hinzufügen muss und es sich nicht immer aufs neue "builded" ... wenn ihr versteht .... hab mir auch mal was zsm gesucht zum beispiel das hier -> http:// stackoverflow.com/questions/13715716/how-to-add-google-play-services-jar-project-dependency-so-my-project-will-run-an
hab dort gemacht was im dritten post steht aber dann bekam ich wieder das Problem mit den R. Errors ... : / probiere es schnell nochmal vll hab ich ja jetzt Glück.

Antworten
Flondy
  • Forum-Beiträge: 45

27.11.2014, 15:53:04 via Website

Mal was anderes :D warum funktioniert das hier nicht ?

android:id="@+id/GotoArtist1Button"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
android:onClick="GotoArtist1"
android:text="gozoateei"
android:textColor="@string/myblack" />

Kann ich keinen String wie z.b. myblack = " #000000 " (Farbe Schwarz) angeben in z.b. einem Button ? : /
Will nicht immer alles einzeln ändern ... geht das ?
Meine app stürzt leider ab wenn ich das machen will : / ? Weiß jemand warum ? :)

Antworten
Flondy
  • Forum-Beiträge: 45

27.11.2014, 16:45:08 via Website

Vielen Dank genau was ich brauche ! :)

Antworten
Flondy
  • Forum-Beiträge: 45

27.11.2014, 17:24:06 via Website

Hab da nochmal ne Frage und zwar will ich das hier :

public void GotoArtist1 (View view) {
goToUrl ("" + R.string.gotoArtist1LinkURL);
}

private void goToUrl (String url) {
Uri uriUrl = Uri. parse(url);
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
startActivity(launchBrowser);
}

machen wobei der string "gotoArtist1LinkURL" eine url enthalten soll aber wenn ich auf den Button klicke stürzt meine app ab : / warum ? Die Methode goToUrl fordert doch einen String ... wenn ich die "" und das + weg mache meldet mir eclipse irgendwas mit int was garnicht sein kannn weil ich doch einen string angegeben habe : / gibts hier auch so ne lösung wie mit der "colors.xml" ? Hab dazu leider nichts passendes gefunden.

Wäre nett wenn jemand weiter weiß :)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

27.11.2014, 17:53:56 via App

R.string.blabla ist nur eine Nummer zu einer Ressource. Du bekommst den String mit

 Context#getRessources().getString(id)

— geändert am 27.11.2014, 17:54:40

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

pepperonasFlondy

Antworten
Flondy
  • Forum-Beiträge: 45

27.11.2014, 19:13:09 via Website

Ah vielen dank wusste ich nicht :) !

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

27.11.2014, 19:43:43 via App

Bitte poste deinen Code direkt und nicht per Screenshot. Zudem wird mir bei deinem Link kein Bild angezeigt

PS: Bilder kannst du bei uns auch über den Browser hochladen ;)

LG

— geändert am 27.11.2014, 19:44:12

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flondy
  • Forum-Beiträge: 45

28.11.2014, 11:21:20 via Website

Ja okay tut mir leid wusste ich nicht ^^ ... ehm ja das war weil meine dropbox noch am synchronisieren war :)

Hier mal der code ... kann das SO zwar ausführen aber wenn ich auf den Button klicke der mir die url in dem jeweiligen String öffnen soll dann verabschiedet sich meine App wieder :D

In meiner MainActivity :

public void GotoArtist1 (View view) {
    goToUrl ("Context#getRessources().getString(gotoArtist1URL)");

}

String in der strings.xml :

<string name="gotoArtist1URL">http://www.graphicsfuel.com</string>

Der Button im layout.xml :

<Button
        android:id="@+id/GotoArtist1Button"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="50dp"
        android:onClick="GotoArtist1"
        android:text="gozoateei"
        android:textColor="@color/myURLblue" />

— geändert am 28.11.2014, 11:26:21

Antworten
Sven R.
  • Forum-Beiträge: 1.904

28.11.2014, 13:25:17 via App

Was sagt der/die LogCat?

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.11.2014, 13:58:34 via App

Schau dir mal diese Zeile an:

goToUrl ("Context#getRessources().getString(gotoArtist1URL)");

Was kann daran nicht stimmen?

  1. alles als String -> keine URL
  2. Context ist kein statisches Element -> in einer Activity "this" benutzen.

Richtig: goToUrl (this.getRessources().getString(R.String.gotoArtist1URL));

LG

— geändert am 28.11.2014, 13:59:53

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flondy
  • Forum-Beiträge: 45

28.11.2014, 15:10:24 via Website

Ups peinlich, peinlich okay vielen lieben dank :D !

Antworten
Flondy
  • Forum-Beiträge: 45

28.11.2014, 18:47:27 via Website

Bei mir wird "getRessources" rot unterzeichnet und es steht dort das die Methode getRessources() undefiniert wäre für den typ Activity

Antworten
Flondy
  • Forum-Beiträge: 45

28.11.2014, 21:50:59 via Website

Okay also so wie ich das jetzt lese ehm kann ich das so garnicht benutzen oder ? Er schreibt ja meine Activity bzw. meine Java Klasse muss ja Context extenden um die getRessources() Methode nutzen zu könnnen und da ich ja schon extends Activity benutze was sie ja standartmäßig tut und man in java keine mehrfachvererbung hat, müsste ich entweder ein Interface erstellen dort dann extends Context und dann in meiner Activity implements "Interfacename" oder ? Oder würde nichtmal der Plan aufgehen ? :D sorry ich bin noch nicht so in der Java/Android Welt untergetaucht ^^ ..

Aber ich lass mich gerne belehren :)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

28.11.2014, 22:04:49 via Website

Wenns schon Activity extendet, dann müsste es funktionieren. Versuch mal this.getRessources();Zeig auch mal deinen Code.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Flondy
  • Forum-Beiträge: 45

29.11.2014, 18:16:21 via Website

    public void GotoArtist1 (View view) {
     goToUrl (this.getRessources().getString(R.string.gotoArtist1URL)); }

Mhm : /

Antworten
Sven R.
  • Forum-Beiträge: 1.904

29.11.2014, 18:30:44 via App

Ich sehe keinen Fehler. Keine Ahnung.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2014, 19:41:58 via Website

ich habe gerade nach geschaut.
getResources ist eine Methode des android.view.ContextThremeWrappers deswegen ist dieser nicht über die Activity Instanz gugänglich.
Wenn du das ganze aber ohne this machst sollte es gehen ( selber überprüft, ohne this tut es :) )

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

29.11.2014, 21:06:50 via App

Da habe ich aber etwas gelernt. Woher kommt denn die Methode oder einfach hä..... ?
@Pascal: Kannst du mir ein Stichwort dazu sagen?

Edit: Die Methode kommt aus Context. Warum kann man nicht die Activity(this) nehmen, die letztendlich von Context erbt?!

— geändert am 29.11.2014, 21:11:14

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2014, 21:32:24 via Website

@Sven: Schau dir mal hier die Vererbung an: http://developer.android.com/reference/android/view/ContextThemeWrapper.html

PS: Du hast recht, muss auch mit der Activity Instanz gehen und geht auch..
Ich hatte mich in der Zeile verguckt und war deswgen in der falschen Klasse drin...
Also es sollte so auch gehen, warum es bei @te allerdings nicht geht wundert mich dann.
@te: Hast du mal den Kompletten Code + Fehlerbeschreibung?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Flondy
  • Forum-Beiträge: 45

29.11.2014, 22:35:54 via Website

:O jetzt bin ich selber baff grad irgendwie ... hab die Zeile genau gleich nochmal von Hand getippt und jetzt funktioniert es einwandfrei :O

VIELEN DANK ! :)

— geändert am 29.11.2014, 22:36:10

Antworten
Flondy
  • Forum-Beiträge: 45

29.11.2014, 22:37:36 via Website

:O jetzt hab ich den Fehler OH MEIN GOTT ... ich hatte "Resources" mit zwei s geschrieben also "Ressources" schäm >.<

— geändert am 29.11.2014, 22:37:49

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.11.2014, 22:53:53 via Website

Das ist mir jetzt garnicht aufgefallen, da man das Wort anhand des Anfangs und Endbuchstabends fast 100% erkennen kann.
Schön dass es jetzt klappt :)

LG Pascal

PS: Setze deinen Thread bitte noch auf Beantworet: im Browser oben unter "Mehr"->"Beantwortet" Danke (smug)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

30.11.2014, 00:23:21 via App

Pascal P.

[...] PS: Du hast recht, muss auch mit der Activity Instanz gehen und geht auch..
Ich hatte mich in der Zeile verguckt und war deswegen in der falschen Klasse drin... [...]

Gut. Also nichts Neues gelernt 😞

😂😂😂

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten