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

[GELÖST]Toast im Thread APP Crashed

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tau31535, 20.11.2011.

  1. tau31535, 20.11.2011 #1
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Hallo zusammen,

    ich muss nochmal was fragen.

    in meiner main class

    PHP:
    public class BTCar2 extends Activity implements OnClickListener
    steht unter anderem dies drinne
    PHP:
    public void EngineStart() {
    up "Start";
    BTTH true;
    Log.e(TAGup);

    //Neue Klasse DemoThread!!
    DemoThread demoThread;
    demoThread = new DemoThread();
    demoThread.start();
    }
    dann gibt es im Ordner src/com/ zwei Datein BTCar2.java & DemoThread.java


    und in dem DemoThread steht folgendes

    PHP:
    import android.app.Activity;
    import android.util.Log;
    import android.widget.Toast;


    public class 
    DemoThread extends Thread {
        
        public 
    void run() {Smileys[IMG]http://1.2.3.12/bmi/www.android-hilfe.de/images/smilies/extra/sleep.gif[/IMG][IMG]http://1.2.3.13/bmi/www.android-hilfe.de/images/smilies/extra/flapper.gif[/IMG][IMG]http://1.2.3.13/bmi/www.android-hilfe.de/images/smilies/extra/mad.gif[/IMG][IMG]http://1.2.3.9/bmi/www.android-hilfe.de/images/smilies/extra/scared.gif[/IMG]
            
            
    while(BTCar2.BTTH)
                
     {
                
    Log.e(BTCar2.TAG,"LOL");
                
                
    DemoThread2.lol();
                
            try {
              
    sleep(500);
            }
            catch(
    InterruptedException e) {
            }
            
         
        }
    }

    public static class 
    DemoThread2 extends Activity  {

        public static 
    void lol() {
            
    Toast.makeText(BTCar2.BTCar.getApplicationContext(),"Connection missing, reconnect",Toast.LENGTH_SHORT).show();
            
        }}}
    wird nun versucht der Toast auszuführen crashed die APP obwohl Eclipse mir keinen Fehler anzeigt. Kann mir bitte jemand helfen?

    Danke
     
    Zuletzt bearbeitet: 25.11.2011
  2. DieGoldeneMitte, 20.11.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Zuletzt bearbeitet: 20.11.2011
    samarek und tau31535 haben sich bedankt.
  3. tau31535, 21.11.2011 #3
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Danke dir,

    da ich nicht viel Ahnung von Java habe, habe ich einfach ein wenig rumprobiert.:razz:

    Habe ich denn eigentlich irgendwie nun ne möglichkeit im Thread nen Toast zu erzeugen oder muss ich das immer an die Hauptactivity zurückübergeben.

    Wenn es geht in meinem Thread nen Toast zu erzeugen, kannst du mir vll. nen bsp. code liefern, da ich nen Linkinhalt nicht verstehe :(

    Die ganzen Syntaxen sind für mich immer noch sehr abstrakt so das ich die ganzen Zusammenhänge mit .start() etc. nicht richtig verstehe!

    Sry.

    Also hoffe ich auf nen beispiel^^.

    Danke schonmal für die INFO!!
     
  4. swordi, 21.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja ohne grundlagen ist es immer schwer.

    versuch dich zuerst an einfacheren apps ohne threading vielleicht. das thema ist aber ein sehr wichtiges und für ernstzunehmende apps sehr wichtig.
     
  5. tau31535, 21.11.2011 #5
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Der Thread ist aber erforderlich da ich dauerhaft beim Drücken eines Button's in einer Schleife den Befehl Start über BT verschicke. Mache ich das ohne Thread wird das loslassen nicht mehr erkannt.
    Sinn für den Handler ist mir einen Toast zu liefern wenn ein Fehler beim Senden auftritt (Exception)

    @swordi

    vll. kannst du mir nen bsp. für nen Handler geben. habe verschiede beispiele gesehen mit Handler auf andnevv oder so. Konnte aber es nicht implementieren.

    sry.
     
  6. swordi, 21.11.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm wo liegt das problem bei der implementation? welche fehler gibts?

    handler anlegen. handler aufrufen. fertig.
     
  7. tau31535, 21.11.2011 #7
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    für dich einfach für mich unverständlich :)

    ich versuch es mal

    PHP:
    Handler messageHandler = new Handler() {

            @
    Override
            
    public void handleMessage(Message msg) {  
                switch(
    msg.what) {
                case 
    5:
                    
    Toast.makeText(BTCar2.this,"Handle mich haha",Toast.LENGTH_SHORT).show();
                }
            }

        };
    ich hoffe nun das es so passt.

    Jetzt weiss ich nur nicht, wie ich von einer anderen Klasse der einen Thread enthält eine Nachricht zu meinem Handler schicke. Wenn ich in er gleichen Klasse bin ohne Thread funktioniert es mit
    PHP:
    sendMessage
    . Aber als Sender von einer anderen Classe in einem Thread ???

    ich bin Radlos
     
  8. swordi, 21.11.2011 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    Einfach messageHandler.sendEmptyMessage(5)

    Der thread muss halt den Händler kennen
     
  9. Tom299, 22.11.2011 #9
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Also wenn du es dir einfach machen willst, dann hast du meiner Meinung nach 2 Möglichkeiten.

    - Du übergibst deinem Thread im Konstruktor den Context der aufrufenden Activity. Dann mußt du keine "Pseudo-Activity-Klasse" definieren, um den Tost zu erzeugen. Und dann einfach mit runOnUIThread() deinen Toast anzeigen.
    - oder du definierst in deiner aufrufenden Activity eine Methode zum Anzeigen des Toast (showToast() oder so) und übergibst deinem Thread im Konstruktor die Referenz auf deine Activity. Dann kannst du die Methode von deinem Thread aus aufrufen. Die Anzeige vom Toast könnte hier evtl. ohne runOnUIThread funktionieren, bin mir aber nicht sicher.

    In beiden Fällen mußt du dich jedenfalls nicht mit dem Handler rumplagen, ist vielleicht einfacher und verständlicher für dich ;-)
     
  10. tau31535, 25.11.2011 #10
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    Danke an alle.

    Ich habe in der onCreate

    PHP:
    mHandler = new Handler(){
        public 
    void handleMessage(Message msg) {
    ergänzt und im der anderen classe aus einem Thread

    PHP:
    Meine activity Classe.mHandler.sendEmptyMessage(3);
                            
    BTCar2.mHandler.sendEmptyMessage(5);
    Danke an alle
     

Diese Seite empfehlen