tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Artorius
ERLEDIGT
JA
ANTWORTEN
10
ZUGRIFFE
796
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Hallo,

    bin in Java ziemlicher Anfänger und hätte da folgende Frage:
    Speziell geht es um das Android SDK.
    In ein Packet habe ich 2 Java-Dateien, in jeder davon ist eine Klasse.
    In der Ersten kann ich auf die UI-Elemente zugreifen, in der Zweiten nicht.
    Außerdem ist die Erste Klasse/Java-Datei das Hauptprogramm und die Zweite der Service dazu, der vom Hauptprogramm aufgerufen wird.

    Wie kann ich also UI-Elemente, oder auch alles andere bei jeder Klasse/Java-Datei nutzen?
    Dachte immer das es mit "public......." geht.


    Hoffe, dass ich es einigermaßen erklären konnte.
    Leider ist mir kein besserer Titel eigefallen.
     

  2. #2
    Matt297 Matt297 ist offline Mitglied Gold
    Registriert seit
    Oct 2008
    Beiträge
    180
    Hi, so wie du es sagst stimmt es schon auf public Elemente kann man von überall drauf zu greifen.
    Hilfreich wären jetzt zum Einen Ausschnitte aus deinem Code und auch eine genau Beschreibung, was er denn nicht macht. Also bekommst du einen Fehler und wenn ja was für einen?
    Ich vermute, dass die Klasse deines Hauptprogramms von der Klasse der UI-Elemente abgeleitet wird(Vererbung) und dadurch die Attribute und Methoden der UI-Klasse erbt und du dadurch darauf zugreifen kannst.
    Wie gesagt, am besten wäre eine genauere Beschreibung und der entsprechende Code.
     

  3. #3
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Leider habe ich wieder ein Problem.
    Das zuvor geschriebene Programm das auch wirklich funktioniert hat, tut dies nicht mehr. Einfach so, ohne irgendwelche Meldungen etc.
    Vielleicht find ich den Fehler und kann dann den Code morgen posten.
    Das Programm sollte einen Service starten und dann in gewissen Abständen auf die UI-Elemente zugreifen.

    Aber jetzt zu dem eigentlichen Problem.
    Wenn ich jetzt z.B. in der Klasse das schreibe: "public String TestString="Test";" müsste ich es doch einfach in der Anderen verwenden können, oder?
    Nur als Beispiel jetzt, müsste doch ungefähr das selbe Prinzip sein wie die Verwendung der UI.
     

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    Zitat Zitat von -H-T-P- Beitrag anzeigen
    Aber jetzt zu dem eigentlichen Problem.
    Wenn ich jetzt z.B. in der Klasse das schreibe: "public String TestString="Test";" müsste ich es doch einfach in der Anderen verwenden können, oder?
    Nur als Beispiel jetzt, müsste doch ungefähr das selbe Prinzip sein wie die Verwendung der UI
    ich hoffe, Deine Frage richtig verstanden zu haben ...

    So etwas wie (in vereinfachter Darstellung)
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public void myClassA()
    {
    ...
        public String TestString = "Test";
    ...
    }
    // -------
    package myClassA()
    public void myClassB()
    {
        myClassA.TestString = "neuer Test";
    }
    geht immer

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Geht immer?
    Geht es auch, wenn die 2 Klassen in unterschiedlichen Dateien sind?
    Bei mir nicht.

    Wenn ich jetzt "package MeineKlasse" eingebe, sagt er "Syntax error on tocken "package", import expected".
    Importiert habe ich das doch schon.

    Aber wenn die Klasse nicht vorhaden sein sollte, dann dürfte auch die Codevervollständigung nicht gehen, oder?
    Die geht aber, zeigt nur nicht den String oder Sonstiges an.

    Hier ist ein Beispiel, ohne irgendwelche Veränderungen. So wie er da ist bekomme ich keine Fehler.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    package de.service.test;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
     
    public class ServiceTest extends Activity {
        /** Called when the activity is first created. */
        public String TestString="Service gestartet";
       
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            startService(new Intent(ServiceTest.this,
                    ServiceTest.class));
        }
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    package de.service.test;
     
    import android.app.Service;
    import android.content.Intent;
    import android.os.Binder;
    import android.os.IBinder;
    import android.widget.Toast;
     
    public class TestService extends Service {
        private final IBinder mBinder = new LocalBinder();
        
        public class LocalBinder extends Binder {
            TestService getService() {
                return TestService.this;
            }
        }
        
        public void onCreate() {
            Toast.makeText(this, "Der String z.B. hier einfügen", Toast.LENGTH_SHORT).show();
        }
     
        public IBinder onBind(Intent intent) {
            return mBinder;
        }
    }
     

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    sorry, das war ich wohl etwas zu schnell (war VHIDT )

    Eigentlich sollten die Zeilen 7 und 8 andeuten, dass es unterschiedliche Dateien (ggf. natürlich auch in unterschiedlichen packages) sind ...
    Du musst das gewünschte Klasse halt nur dort, wo Du sie verwenden willst, importieren!

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Habe ich auch gemacht und dann kommt es z.B. zu den Fehler: siehe oben.
     

  8. #8
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    Hi!
    Vielleicht solltest du mal konrekt das Beispiel posten, in dem der Fehler auftritt?

    *grüssle*
     
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  9. #9
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Sorry, dass das so lange gedauert hat.

    Vielleicht solltest du mal konrekt das Beispiel posten, in dem der Fehler auftritt?
    Dachte das hätte ich?

    OK. Noch genauer.
    Jetzt habe ich zum Spass mal den Code umgeändert, wie es mir vfl_freak gesagt hat.
    Geändert hat sich nun der 2.Teil, also der Service:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    package de.service.test;
    package ServiceTest;             //Fehler 1
     
    import android.content.Intent;
    import android.app.Service;
    import android.os.Binder;
    import android.os.IBinder;
    import android.widget.Toast;
     
    public class TestService extends Service {
        
        public class LocalBinder extends Binder {
            TestService getService() {
                return TestService.this;
            }
        }
        
        public void onCreate() {
            Toast.makeText(this, ServiceTest.TestString, Toast.LENGTH_SHORT).show();    //Fehler 2
        }
     
        public IBinder onBind(Intent intent) {
            return mBinder;
        }
        
        private final IBinder mBinder = new LocalBinder();
    }

    Ich verstehe zwar nicht wieso ich nochmal "package ServiceTest" reinschreiben soll, wenn alles schon da ist, aber nun gut.

    Nun die konkreten Fehler, so wie es mir Eclipse sagt:
    Fehler 1: The declared package "ServiceTest" does not match the expected package "de.service.test"
    Fehler 2: Cannot make a static reference to the non-static field ServiceTest.TestString. (ServiceTest.TestString ist rot unterringelt).
     

  10. #10
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    Moin!
    Zitat Zitat von -H-T-P- Beitrag anzeigen
    Hier ist ein Beispiel, ohne irgendwelche Veränderungen. So wie er da ist bekomme ich keine Fehler.
    Nun nach dieser Aussage hatte ich dich so verstanden, dass der von dir gepostete Code bei dir funktionieren würde.

    Also, Paketdeklarationen:
    Wenn deine öffentliche Klasse "TestService" beispielsweise im Paket "de.service.test", bedeutet dies, die Datei TestService muss sich in einer Orderstruktur "/xyz/de/service/test" befinden. Tut sie das? Die Angabe "package ServiceTest;" ist dann wahrscheinlich mal falsch. Hat auch niemand behauptet, dass du dies dazuschreiben solltest. VFL_Freak sagte nur, du sollst die Klasse gegebenenfalls importieren.


    Dein zweiter Fehler:
    Der String TestService ist in deiner Klasse ServiceTest nicht statisch, wie die Fehlermeldung schon schön sagt. Entweder deklararierst du den String als statische Variable, oder du musst dir erst eine Instanz der Klasse ServiceTest erstellen und kannst dann auf die Variable zugreifen....

    *grüssle*
    Geändert von Artorius (13.06.10 um 08:34 Uhr)
    -H-T-P- bedankt sich. 
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  11. #11
    -H-T-P- -H-T-P- ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Beiträge
    89
    Da hab ich wohl was falsches verstanden.

    Dachte ich hätte schon static ausprobiert...
    Auf jedenfall gehts!

    Denke, dass ich mich mal wieder zu dumm gestellt habe.


    Vielen Dank für die Hilfe!
    Hoffe ich hab euch nicht zu sehr unterfordert.
     

Ähnliche Themen

  1. JSP, Java Klassen, Variabeln
    Von thinwath im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 12.12.07, 16:22
  2. C# und Java/C++-Klassen
    Von Zero_Base im Forum .NET Windows Forms
    Antworten: 8
    Letzter Beitrag: 20.09.05, 08:48
  3. java klassen nach j#
    Von jantar im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 31.03.05, 13:31
  4. FTP-Klassen in java?
    Von lullemi im Forum Java
    Antworten: 2
    Letzter Beitrag: 28.05.04, 14:38
  5. [JAVA] Klassen für MS Office?
    Von Transmitter im Forum Java
    Antworten: 2
    Letzter Beitrag: 16.07.03, 12:35