AndroidStudio mag mich wohl nicht

S

Selbstbauer

Neues Mitglied
0
Tagchen und ich hab es geschafft daß gradle im offlineModus arbeitet aber mein eigentliches hauptanliegen ist, daß ich egal wie, keine variablen festlegen kann um diese dann in z.b. einer anderen klasse zu verwenden.

z.b. kann ich zwar in der MainActivity im java dort in dessen klasse z.b. ein

public static int meineVariable=0;

angeben aber dieses meineVariable kann ich dann in keiner anderen klasse außerhalb der klasse verwenden.
Ich hatte schon codeschnipsel bei mir reingemacht aus dem internet, erstens sahen sie nach dem einfügen total anders aus und dann meckerte AS über den variablentyp rum und egal ob ich als public oder private anlege, ich komm an die variable nicht ran. Ich hatte dann auch versucht eine klasse für die immerwieder zu verwendende variable in einer eigenen java-datei zu haben und diese klasse dann zu importieren, die zeile für den import blieb allerdings immer grau (weil die klasse im script nicht verwendet wurde) DAS ist soweit noch logisch.
Als bsp. ...... ich hatte ein object : CountDownTimer...... und dort sollte dann wenn jedesmal der timer abgelaufen ist, in einem textView ein anderer text angezeigt werden. Das hat auch ganz gut mit dem timer fuktioniert allerdings mit der "hilfsvariablen" als zählwerk, so daß ich die verschiedenen statusse setz a la i++; , war garnicht möglich, AS hat mir dieses i immer in rot angezeigt und der emulator wollte dann auch nicht starten und es waren immer ein haufen fehler drin daß es iwie eine member declaration geben muß/sollte.
 
@Selbstbauer

Hallo Selbstbauer und willkommen im Forum.

angeben aber dieses meineVariable kann ich dann in keiner anderen klasse außerhalb der klasse verwenden.

Das ist richtig , denn Java resp. unter Android ist kein C/C++.
Statische und klassenübergreifende Variablen gibt es in dem Sinne nicht.

Dafür gibt es verschiedene Varianten des Datenaustausches - Dazu ein paar Stichpunkte für dich

Intent, Broadcast, Singelton, Callback Listener, Getter/Setter
(Für dein Beispiel würde ich Callback Listener nehmen)

Desweiteren sei erwähnt , dass es zwei Mechanissmen unter Android gibt , die Dir eine statische Klassen-Variable
unter Android während der Laufzeit durchaus als ungültig deklarieren können.
Auch das ist eine Eigenschaft eines mobilen Devices unter Android - Dazu sind die Themen GarbageCollector und LifeCycle wichtig.


Ich hatte schon codeschnipsel bei mir reingemacht aus dem internet,
Die denkbar schlechteste Lösung ohne Hintergrundwissen.
Wir bedienen uns i.d.R. mit der originalen API-Dokumentation
API reference | Android Developers


Und ergänzend für deine Basiskenntnisse :
[LEITFADEN] Der Einstieg in die Android Programmierung mit Android Studio
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: jogimuc
hab jetzt durch ein anderes beispielscript im netz erausgefunden wie es geht. Bei denen die ich vorher so hatte, wurde nirgends erwähnt daß man in der manifest dann auchnoch einen eintrag machen muß. jetzt funktioniert das intervallmäßige ändern des textes eines textView-elements. auch der part den man dann in seinem activity-script einbiden muß um an die variable heranzukjommen sah anders aus als bei den beispielen die ich erst hatte.

jetzt hab ich eine kotlin-datei MyApplication.kt mit

package com.example.xxxxxxxxxxxx
import android.app.Application

class MyApllication : Application(){
var globalVar="I am a global Variable"
var textSwitcher=0;
}

dann in der mainifest im bereich application ein
android:name=".MyApplication"
eingefügt und dann im aktivitätsscript mittels

var mApp=MyApllication()
var textSwitcher=mApp.textSwitcher

an die variable herangekommen. Danke aber nochmals für die antwort.
 
Hallo

das wird so nicht richtig gehen. Du erstellst zwar eine Instanz deiner zweiten Klasse klar kannst du darauf zugreifen. Aber wenn du die aktuelle Activity verlässt und eine zweite neue Activity aufrufst und dort wieder eine Instanz deine vermeintlichen statischen Kasse erstellst, ist das eine andere Instanz und deine Werte sind weg.



Das ist in kotlin auch nicht anders als in java. Static gibt es in kotlin nicht dafür gibt es das die

Spezielle Klasse „object“ . und wenn du den Object Namen nicht angeben willst das companion object

In Kotlin hast du auch noch die Möglichkeit Variablen im Top Level Bereich zu erstellen.

Object Expressions, Object Declarations and Companion Objects - Kotlin Programming Language


[doublepost=1563389715,1563388457][/doublepost]
Code:
// Java -------------------------------------------------------------

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Es.meineVariable = 2;
     
    }
}

// Zweite Datei

public class Es {
       public static int meineVariable=0;


}

//  Kotlin ----------------------------------------------------

class MyClass {
    companion object  {

        var meineVariable = 0
    }
}




class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

         MyClass.meineVariable = 2

        }
 }
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: swa00
Danke, mit der ausführlichen scripteansicht war es wirklich möglich in der MainActivity mittels

MyClass.globalVar="Ich habe was verändert"

den wert zu ändern und in der SecondActivity diesen veränderten Wert mittels

val myText: TextView = findViewById(R.id.textView2)
myText.text=MyClass.globalVar;

auch anzeigen zu lassen. Ist irgendwie auch eine saubere Lösung Daten zwischen einer Activity zu einer nächsten activity "zu schicken" ohne diesen intentGedöns was ich schon iwie mal gelesen hatte.
 
Zuletzt bearbeitet:
Da dies auch in Kotlin eine Art statische Variablen oder auch Funktionen sind. Und der Code auch auf den bytecode von Java abgebildet wird. Könnte das was swa00 gesagt hat auch in Kotlin zutreffen. Wie das von Kotlin zum bytecode und wie sich dann der GC verhält weiß ich nicht.
Beachte das aber auch in Kotlin.

Die Antworten von swa00 haben auch in Kotlin Gültigkeit. Und sollten auch hier einer statischen Variante vorgezogen werden.



Desweiteren sei erwähnt , dass es zwei Mechanissmen unter Android gibt , die Dir eine statische Klassen-Variable
unter Android während der Laufzeit durchaus als ungültig deklarieren können.
Auch das ist eine Eigenschaft eines mobilen Devices unter Android - Dazu sind die Themen GarbageCollector und LifeCycle wichtig.

übrigens muss man in Kotlin nicht immer das findviewbyid machen. Schaue dir das in der doch Docu mal an.

Kotlin Android Extensions: Say goodbye to findViewById (KAD 04)
 
Zuletzt bearbeitet:
swa00 schrieb:
@Selbstbauer

Desweiteren sei erwähnt , dass es zwei Mechanissmen unter Android gibt , die Dir eine statische Klassen-Variable
unter Android während der Laufzeit durchaus als ungültig deklarieren können.
Auch das ist eine Eigenschaft eines mobilen Devices unter Android - Dazu sind die Themen GarbageCollector und LifeCycle wichtig.

@swa00 Kannst du dazu mehr schreiben? Mir fällt spontan kein Fall ein wo eine statische Variable ungültig wird, außer der App-Prozess wird beendet.

Selbstbauer schrieb:
Ist irgendwie auch eine saubere Lösung Daten zwischen einer Activity zu einer nächsten activity "zu schicken" ohne diesen intentGedöns was ich schon iwie mal gelesen hatte.

Nein.
Sorry, aber das ist definitiv keine saubere Lösung und solltest du dir abgewöhnen.
 
Hallo ich hatte es auch schon mal das eine variable die genau auf den Weg denn ich für java gegeben habe vom GC als unültig eingestuft wurde. Also gelöscht.
Speicher Mangel und app im Hindergrund. Können das verursachen.



Es gibt ja nichts wo eine Instanz gehalten wird. Und bei Speicher Mangel kann der GC es löschen.
Da ist singelton die bessere Lösung den da wird eine Instanz gehalten. Und der Gc weiß das er es nicht löschen darf bzw das er es sicheren speichern muss.

Bei der java Variante wird ja keine instanz von der Klasse mit der Variablen erstellt. Und bei Speicher Mangel hat der GC freie Hand


Wie gesagt wie das in kotlin mit dem companion object ist, besser gesagt wie das in Java byte Code umgesetzt wird kann ich nicht sagen.
Es gab ja auch in den ersten Kotlin Versionen kein static. warscheinlich genau aus dem Grund.
Später haben sie dann die Klasse object und das companion hinzu gefügt. Nur wie sie das unter der Haupe machen habe ich noch nicht gefunden.
 
Zuletzt bearbeitet:
gibts eigentlich mal ne brauchbare auflistung was man alles oben bei import..... angeben kann? andauernd wenn ich gebrauchte syntax kopiere und einfüge, scheint sowas wie ne "engine" dafür zu fehlen und das AS fügt oben nicht automatisch eine neue zeile ein bei import android..........

ich wollt jetzt nach nem buttonklick das hintergrundbild verändern aber dafür brauch ich dieses layout.set.......... aber bei dem layout meckert er schon in rot rum.
 
@Selbstbauer


gibts eigentlich mal ne brauchbare auflistung was man alles oben bei import..... angeben kann? andauernd wenn ich gebrauchte syntax kopiere und einfüge, scheint sowas wie ne "engine" dafür zu fehlen und das AS fügt oben nicht automatisch eine neue zeile ein bei import android..........

ich wollt jetzt nach nem buttonklick das hintergrundbild verändern aber dafür brauch ich dieses layout.set.......... aber bei dem layout meckert er schon in rot rum.

Bei aller Liebe, aber es verdichtet sich der Eindruck , dass du eigentlich nicht richtig Programmierern möchtest sondern lieber
aus dem Netz kopierst bis es ggf. klappen könnte. (Try & Hope)
Alleine deine letzte Frage deutet auch darauf hin, dass du die Dokumentationen nicht liest oder lesen magst - richtig ? (z.b. die Bedienung von AS)

Wir sind aber alle hier hauptberufliche Programmierer und opfern unsere Freizeit um Denjenigen zu helfen , die auch
gewillt sind , die Basis fundiert zu erlernen und vor allem sich einzulesen.

Und diesen Eindruck hinterlässt du uns - zumindest im Moment - überhaupt nicht .

Entweder verstehst du nicht , was wir dir schreiben, oder es interessiert dich einfach nicht.
Dies ist gelinde gesagt - uns allen gegenüber unfair.

Wenn wir dann den Eindruck haben , dass du wirklich fundiert hier oder dort eine berechtigte Frage hast,
dann bist du herzlichst willkommen.

Ach und nur so nebenbei : Mehr als ein einziges Danke an all die fleissigen Helfer würde Dir keinen Zacken aus der Krone brechen.



@deek
Habe dich nicht vergessen - kommt später :) (bin noch unterwegs)

Aber das hier musste mal sein - Wir sind hier keine Zirkusveranstaltung .....
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: jogimuc
Hallo

gibts eigentlich mal ne brauchbare auflistung was man alles oben bei import..... angeben kann?

nein gibt es nicht zumindest ist mir das nicht bekannt.

Wo ist eigentlich das Problem wenn etwas Rot ist klickst du mit gedrückter „alt“ Taste auf das Rote und du kannst den Import hinzufügen lassen.


Wo ist das Problem mit den Button wenn wir Helfen solle bitte etwas ausführlicher.

Ps.
@swa00 sorry du warst schneller und hast auch recht.
 
  • Danke
Reaktionen: Selbstbauer und swa00
@swa00, ich würd mal bei meinen kommentaren lesen, da steht z.b. schonmal ein danke.

was ist sooooo verwerflich daran sich ein-oder zweizeiler ausm netz zu kopieren und das mal zu testen um die funktionsweise kennenzulernen?
Wenn leute z.b. ihre ein-undmehrzeiler im web veröffentlichen aber nicht noch dabeischreiben daß diese oder jede zeile bei import ..... noch mit dabei muß und ich hier beim reinen einfügen dieser mehrzeiler schon nurnoch rote bezeichner oder innerhalb einer funktion rote variablen sehe, dann kann ichs nicht lernen. Nur zur info, mit html,php nd mysql wäre ich schon weitaus weiter, java hat ich immer nur als streifschuß auf den webseiten, die ich supportet hatte.

von diesen mehrzeilern läßt sich (zum glück) auch keine komplette und funktionierende app mal eben schnell zusammenkopieren und ich hab mir als projekt mal eben die meßlatte verdammt hoch gesetzt. Ich entschuldige mich auch tausend mal daß ich in einigen augen vielleicht ziemlich dusslige fragen stelle.
[doublepost=1563477801,1563477716][/doublepost]@jogimuc, danke für den tip mit der ALT-Taste

sowas ist doch mal konstruktiv als jemandem vorzuwerfen sich mittels beispielscriptchen eine komplette app zusammenzuräubern.
 
swa00 hat aber recht du könnstest auch etwas lesen. Dein Glück das ich so langsam war.

Code:
 java hat ich immer nur als streifschuß auf den webseiten, die ich supportet hatte.

möchte nur Bemerken das das was du das gemacht hast JavaScript war und kein Java.Das zwei verschiedene Sprachen die zwar ähnlich sind aber doch verschieden sind.
Das nur mal am Rande.

die einzige richtige Programmiersprache aus deinen Aufzählungen ist PHP. Das andere sind keine Programmiersprachen.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: swa00
stellt man als anfänger paar fragen, wird die vorgehensweise von mehrzeilern mal in der app testen um zu kuckn wie sie funktionieren usw., gleich als zusammenräubern und nicht lernwillig dargestellt. "learning by doing" aber da machts schonmal keinen sinn hier überhaupt noch fragen zu stellen in zukunft.
 
Wie du meist. Bedenke das mansche von hier auch in anderen Foren tätig sind.

Etwas Kritik Fähigkeit hätte ich dir schon zugetraut.
 
kritik is ja auch richtig aber es gibt nen unterschied zwischen kritik und jemanden etwas zu bezichtigen, die arbeitsweise des lernens in frage zu stellen UND NUR WEIL MAN DIESEN DANKE-BUTTON nicht anklickt,sondern ein danke im antworttext hinterläßt, wird gleich noch drauf rumge(k)(h)ackt daß mich sichg angeblich nichtmal bedanken kann. Super.

"Wie du meist. Bedenke das mansche von hier auch in anderen Foren tätig sind."
... klingt schon fast wie ne Drohung, na prost mahlzeit für mein projekt.
 
@swa00 soltest du @deek
eine Antwort geben und willst sie aber hier nicht mehr posten mich würde das auch Interessieren.:)
[doublepost=1563480862,1563479958][/doublepost]Hier ist keiner Sauer auf dich das bist du selber auf dich, und du scheinst mir sehr schnell die Finde ins Korn zu werfen.
Haben wir dir nun Tipps gegeben oder nicht. Ich denke du host erst mal tief Luft .

Und wegen den Programmiersprachen PHP ist eine die anderen sind es nicht. In PHP kannst du Strukturiert oder auch Objektorientiert nutzen, und da gibt es auch so etwas wie import „includ „ und Bibliotheken kannst du auch einbinden. Also sollte dir das nicht direkt fremd sein.
zumindetens wenn du Objektorientiert gearbeitet hast.
[doublepost=1563481172][/doublepost]Ich denke wir kommen nun wieder dun deinem Problem zurück wenn du noc h willst.
 
im php hab ich selbst mit "include" ohne ende gearbeitet und in der datenbank arschkomplexe strukturen geschaffen. Wollte mein eigenes CMS basteln, war dann aber so dynamisch daß ich selbst nichtmehr durchgeblickt hatte sobald ich paar tage nicht gescriptet hatte. Sauer auf mich bin ich nicht, im gegenteil, dafür daß ich per vorige woche donnerstag die ersten schritte im AS gemacht hatte (design des layouts für die spielhauptseite) und das jetzt unten links 3 verschiedene texte abwechselnd angezeigt werden, während oben drüber ne spielweltuhr läuft, die mittels stop/play-button gestoppt oder zum laufen gebracht wird (deshalb dieser background-wechsel bei nem button, daß weitere buttons auch schon funktionieren (zeigen zwar im moment nur im TOASTTEXT an daß sie geklickt wurden aber immerhin, daß ich schon zwischen verschiedenen,geplanten und notwendigen activities jumpen kann.......

neeeeeeee sauer auf mich bin ich keineswegs
 
Ok und wo ist jetz dein Problem?
 
Screenshot_1563481687.png
 

Ähnliche Themen

ConfusingFutureGames
  • ConfusingFutureGames
Antworten
6
Aufrufe
1.764
ConfusingFutureGames
ConfusingFutureGames
Zurück
Oben Unten