1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Onclick Avtivity funktioniert nicht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von rufux, 17.11.2010.

  1. rufux, 17.11.2010 #1
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    Ich schon wieder also hier ertsmal code:

    main.java
    Code:
    public class main extends Activity {
     Button sendButton;
     Button recieveButton;
      
     private Intent intentService;
     
         public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            TextView tv = new TextView(this);
            tv.setText("main");
            setContentView(R.layout.main);
            sendButton = (Button) findViewById(R.id.sms_sending_button);
            recieveButton = (Button) findViewById(R.id.sms_recieving_button);
             
               sendButton.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
                        [COLOR=red][B]Intent intent = new Intent(this, sms_sending.class);
                             this.startActivity(intent);[/B][/COLOR]
                     }
                });
                recieveButton.setOnClickListener(new View.OnClickListener() {
                       public void onClick(View v) {
                          [COLOR=red][B] Intent intent = new Intent(this, sms_recieving.class);
                           this.startActivity(intent);[/B][/COLOR]
                       }
                 });    
    }
    }
    sms_sending.java
    Code:
    public class sms_sending extends Activity {
            
        String number = "5556" ;
        String msg ="Ich bin nur ein Test";
       
      public void onCreate(Bundle savedInstanceState)  {
             super.onCreate(savedInstanceState);
             TextView tv = new TextView(this);
             tv.setText("send");
             setContentView(R.layout.sending);
             
                sendSMS(number,msg);}
        }
       private void sendSMS(String number, String message){
     
     PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,sms_sending.class), 0);   
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(number, null, message, pi, null);
       }
    
    public IBinder onBind(Intent intent) {
     
     return null;
    }
    }  
    }
    so und ich bekomme an der rot markierten Stelle eine Fehlermeldung.

    Er meldet: The constructor Intent(new View.OnclickListener(){}, Class<sms_sending> is undefined

    und

    the method startActivity(Intent) is undefined for the type new View.OnClickListener(){}


    evtl findet ja einer das Problem

    VG
    und Danke
     
  2. Lilithian, 17.11.2010 #2
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Versuch mal anstatt:

    Code:
    Intent intent = new Intent([COLOR=Red]this[/COLOR], sms_sending.class);
                            this.startActivity(intent);
    dieses hier:

    Code:
    Intent intent = new Intent([COLOR=Red]NameDeinerKlasse.this[/COLOR], sms_sending.class);
                            this.startActivity(intent);
    Ansonsten sieht er nämlich den OnClickListener als this und nicht deine Klasse.
     
    rufux bedankt sich.
  3. HeroUser96, 17.11.2010 #3
    HeroUser96

    HeroUser96 Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    2
    Registriert seit:
    15.09.2010
    sonst probier mal das:
    Code:
    
    public class main extends Activity {
     Button sendButton;
     Button recieveButton;
      
     private Intent intentService;
     
         public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            TextView tv = new TextView(this);
            tv.setText("main");
            setContentView(R.layout.main);
            sendButton = (Button) findViewById(R.id.sms_sending_button);
            recieveButton = (Button) findViewById(R.id.sms_recieving_button);
             
               sendButton.setOnClickListener([COLOR="Red"]this[/COLOR]);
               recieveButton.setOnClickListener([COLOR="red"]this[/COLOR]);
    
            [COLOR="red"]public void onClick(View src) {
           
            if(src.getId() == R.id.sms_sending_button) {
                Intent intent = new Intent(this, sms_sending.class);
                             startActivity(intent);  }
    
            if(src.getId() == R.id.sms_receiving_button) {
                  Intent intent = new Intent(this, sms_recieving.class);
                           startActivity(intent);
    }[/COLOR]
    }
    

    Ich habs jetzt nicht ausprobiert, müsste aber funktionieren :D
     
    rufux bedankt sich.
  4. Fr4gg0r, 17.11.2010 #4
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Wird nicht funktionieren, dann müsste er erstmal View.OnClickListener implementieren :razz:
     
    rufux bedankt sich.
  5. HeroUser96, 17.11.2010 #5
    HeroUser96

    HeroUser96 Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    2
    Registriert seit:
    15.09.2010
    Es ging ja eigentlich eher um das Prinzip...
    Aber du hast natürlich recht
     
  6. rufux, 18.11.2010 #6
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    also ich habe die änderungen von Hero jetzt übernommen...

    Doch leider habe ich jetzt den Fehler, der im Thread besprochen wurde nicht verstanden

    zumindest bekomme ich jetzt hier:

    Code:
     
    sendButton.setOnClickListener(this);
    
    und hier
    Code:
     
     
    public void onClick(View src) {
    
    einen Fehler

    bei dem sendButton.setOnclickListener(this) habe ich jetzt ein main.this draus gemacht... zumindest kommt kein fehler mehr... Ist das soweit richtig


    bei der Funktion onClick bringt er mir folgenden Fehler:

    void is an invalid type for the variable onClick... Das macht für mich keinen Sinn... Warum kann das kein void sein und was muss ich machen?

    ausserdem sagt er mir, dass irgendwelche Klammern fehlen?

    Ich bin überfragt...

    Vielen Dank schonmal
     
  7. Fr4gg0r, 18.11.2010 #7
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Sofern du die erste Zeile von HeroUser zu
    public class main extends Activity implements View.OnClickListener{
    änderst, sollte es funktionieren.
    Achja, in der onClick fehlt eine schließende Klammer bei der zweiten if.
     
    rufux bedankt sich.
  8. HeroUser96, 18.11.2010 #8
    HeroUser96

    HeroUser96 Android-Hilfe.de Mitglied

    Beiträge:
    53
    Erhaltene Danke:
    2
    Registriert seit:
    15.09.2010
    Stimmt, dass hab ich vergessen
    Aber eigentlich müsste Eclipse doch eine Fehlermeldung rauswerfen, dass man die Methoden implementieren muss :confused:
     
  9. sixi, 19.11.2010 #9
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Eclipse meckert nur wenn du "implements XXX" einfügst, aber die Methoden von XXX nicht implementierst. Ohne das "implements" ist das "public void onClick(View src)" eine normale, von dir geschriebene Methode - die nunmal onClick heißt ohne das sie die Semantik von "onClick" hat.
     
    rufux bedankt sich.
  10. rufux, 19.11.2010 #10
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    So das hilft mir schonmal weiter...

    Vielen Dank...

    Nun habe ich noch eine Grundlegende Frage, die sich daraus leider entwickelt ;)

    Ich rufe ja mit Hilfe des Intents quasi eine "neue Seite" auf :)

    Nun bekomme ich jedoch wenn ich auf den Buton klicke eine Fehlermeldung, dass die Klasse nicht aufgerufen werden kann.

    Ok das hat sich erledigt... Ich bekomme eine NULL Pointer Exception

    und zwar:
    DeviceMonitor]Sending jdwp tracking request feailed
    ddms]null

    der rest kommt scheinbar daher, dass ddms null ist? was ist ddms und wo wird das gesetzt?

    Der Fehler lautet übrigens: The application sms_sending(process com.test.main) has stopped unexpectedly. Please try again.

    Viele Grüße
     
    Zuletzt bearbeitet: 19.11.2010
  11. funcoder, 19.11.2010 #11
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    In der logcat Ausgabe siehst du die detaillierte Fehlerausgabe:
    > OrdnerDeinesSDK\tools\adb.exe logcat


    Leitet die sms_sending.class auch von einer Activity ab?

    Edit:
    Sehe gerade, das du die Log Ausgabe zwischenzeitlich schon gefunden hast :)
    Prüf ob in deiner sms_sending.java File von der Klasse Activity geerbt wird.
     
    Zuletzt bearbeitet: 19.11.2010
  12. rufux, 19.11.2010 #12
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    So da ich einfach völlig überfragt bin hier mein CODE


    meine Main
    Code:
    public class main extends Activity implements View.OnClickListener{
     
     Button sendButton;
     Button recieveButton;
     
     private Intent intentService;
     
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            TextView tv = new TextView(this);
            tv.setText("main");
            setContentView(R.layout.main);
            sendButton = (Button) findViewById(R.id.sms_sending_button);
            recieveButton = (Button) findViewById(R.id.sms_recieving_button);
     
            sendButton.setOnClickListener((android.view.View.OnClickListener) main.this);
            recieveButton.setOnClickListener((android.view.View.OnClickListener) main.this);
      }
     
     public void onClick(View v) {
      if(v == sendButton){
           Intent intent = new Intent();
           intent.setClass(main.this, sms_sending.class);
           startActivity(intent);
     
      }
       if(v == recieveButton){
       Intent intent = new Intent();
       intent.setClass(main.this, sms_recieving.class);
       startActivity(intent);
      }
     
     }
    }
    
    meine sms_sending
    Code:
    public class sms_sending extends Activity  {
     
        String number = "5556" ;
        String msg ="Ich bin nur ein Test";
     
      public void onCreate(Bundle savedInstanceState)  {
             super.onCreate(savedInstanceState);
             TextView tv = new TextView(this);
             tv.setText("send");
             setContentView(R.layout.sending);
          sendSMS(number,msg);}
     
     
       private void sendSMS(String number, String message){
     
        PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this,sms_sending.class), 0);   
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(number, null, message, pi, null);
       }
    public IBinder onBind(Intent intent) {
     // TODO Auto-generated method stub
     return null;
    }}
    
    und zu guter letzt meine Manifest
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.main"
    android:versionCode="1"
    android:versionName="1.0">
    <application android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@drawable/background">
     
    <activity android:name=".main"
    android:label="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
     
    <category android:name="android.intent.category.LAUNCHER" />
     
     
    </intent-filter>
    </activity>
    <activity android:name=".sms_sending"></activity>
    <activity android:name=".sms_recieving"></activity>
    <activity android:name=".link_test"></activity>
    </application>
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
    <uses-permission android:name="android.permission.RECIEVE_SMS"></uses-permission>
     
    <uses-sdk android:minSdkVersion="4" />
     </manifest> 
     
    
    so und nun die Fehlermeldung ;)

    So sorry für den riesen Eintrag... Ich hoffe jedoch, dass mir jemand weiter helfen kann

    vg
     
    Zuletzt bearbeitet: 19.11.2010
  13. Lilithian, 19.11.2010 #13
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Im Android-Manifest musst du die Activities so deklarieren:

    Code:
    <activity android:name=".KlassenName" />
    das müsste in deinem Fall dann glaube ich so sein:

    Code:
    <activity android:name=".sms_sending" />
     
    Zuletzt bearbeitet: 19.11.2010
  14. rufux, 19.11.2010 #14
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    ja ich weiß, dass war auch nur nen test... also ursprünglich hatte ich es so, gleicher Fehler...
     
  15. rufux, 22.11.2010 #15
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    niemand, der mir helfen kann?
     
  16. the_alien, 22.11.2010 #16
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Hast du gar keine Packages für deinen Quellcode? Liegen alle Klassen in default?

    Edit:
    Wenn man sich mal die Spezifikationen im Dev Guide anguckt, findet man folgendes für android:name im activity-tag in der Manifest.xml:
    Wenn du also "com.test.main" angibst als package und deine sms_sending Activity in "com.test.smssending" liegt, was der Stacktrace ja zeigt, dann musst du den Namen der Activity auch entsprechend angeben: "com.test.smssending.sms_sending", ansonsten hängt er es nur an das Package an und findet unter "com.test.main.sms_sending" natürlich nichts.
     
    Zuletzt bearbeitet: 22.11.2010
    rufux bedankt sich.
  17. rufux, 22.11.2010 #17
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    hab ich schon, nur habe ich weggelassen...

    liegen alle in

    com.smstest.

    und dann habe ich da eine main, sms_sending und eine sms_recieving class

    er zeigt mir auch im eclipse keine fehler mehr an

    nur der LogCat... siehe weiter oben.
     
  18. rufux, 22.11.2010 #18
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    super...

    danke, genau das war es natürlich ;)
    man gut, dass man mit nicht richtig lesen so seine Zeit verschwenden kann ;)
     
  19. rufux, 26.11.2010 #19
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    So jetzt, da alles soweit funktioniert und ich jetzt auch ENDLICH eine Kommunikation zwischen den beiden Emulatoren hinbekomme läuft es jetzt auch.

    habe jetzt aber noch ein anderes Problem.

    Ich rufe ich meiner main per intent auf einem onclick meine Klasse sms_sending auf.

    Das Funktioiniert wie gesagt auch. Doch er sendet SMS bis der Speicher voll ist :) Also nicht eine sondern hunderte.

    Idee war jetzt, dass ich jetzt in der sms_sending class wieder zurück zur main gehe.

    Aber das geht irgendwie nicht.

    Ich versuche in der sms_sending mit folgendem Code zurück in die main zu kommen:

    Code:
    public void onCreate (Bundle x)
    super.onCreate(x);
    TextView tv = new TextView(this);
    tv.setText("send");
    setContactView(R.layout.sending);
    sendSMS(number,msg);
    Intent intent = new Intent();
    intent.setClass(sms_sending.this,main.class);
    
    vielelicht kann mir jemand helfen.

    vielen dank

    Update:

    Also habs hinbekommen, dass er nur eine schickt ;)

    Aber trotzdem geht er nicht zurück auf den mainscreen
     
    Zuletzt bearbeitet: 26.11.2010
  20. rufux, 30.11.2010 #20
    rufux

    rufux Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    5
    Registriert seit:
    11.11.2010
    niemand eine idee?
     

Diese Seite empfehlen