Zahlen auf dem Display ausgeben

  • Antworten:13
  • Bentwortet
Georg C.
  • Forum-Beiträge: 235

17.04.2014, 12:23:49 via Website

Hallo, wie kann ich z.B. generierte Zahlen in Echtzeit (damit die auch angezeigt werden) visualisieren?

Code:

class Task implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i <= 1000; i++) {
                int value = i;
                //final int value = i;

                //textView1.setText(Integer.toString(value));

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {}

                String str_zahlen_ausgeben =  Integer.toString(value);
                //textView1.setText(str_zahlen_ausgeben);
                // textView1.setText(Integer.toString(value));
                System.out.println(str_zahlen_ausgeben);
            }
        }
    }

Die System.out.println(...) Methode - KLAR!!!! zeigt die Zahlen an! Ich möchte die Zahlen auf dem Display des Handy anzeigen zu lassen / visualisieren. Womit ist es möglicht?

Wenn ich (wie im Code) es mit der TextView versuche, stürz die App ab. Bitte um Erklärung!

LG Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Michele
  • Forum-Beiträge: 1.525

17.04.2014, 12:27:07 via Website

Hallo.

Bitte zeige uns dann doch deine LogCat.:) Die sagt dir und uns dann genauer, wo der Fehler liegt.

LG

Antworten
Andreas S.
  • Forum-Beiträge: 76

17.04.2014, 12:29:20 via App

Auf GUI Elemente kann nur vom ui thread aus zugegriffen werden.

Klasse: android.os.Handler

Georg C.

Antworten
Georg C.
  • Forum-Beiträge: 235

17.04.2014, 14:21:36 via Website

Hallo,

CODE:

class Task implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i <= 1000; i++) {
            int value = i;
            //final int value = i;

            //textView1.setText(Integer.toString(value));

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}

            String str_zahlen_ausgeben =  Integer.toString(value);
            textView1.setText(str_zahlen_ausgeben); // <---------------  line: 53

            System.out.println(str_zahlen_ausgeben);
        }
    }
}

leider es werden keine LogCat Meldungen generiert! Außer! - Debug Meldung

Thread [<11> Thread-72] (Suspended (exception ViewRootImpl$CalledFromWrongThreadException))    
<VM does not provide monitor information>   
ViewRootImpl.checkThread() line: 3939   
ViewRootImpl.invalidateChild(View, Rect) line: 714  
ViewRootImpl.invalidateChildInParent(int[], Rect) line: 763 
LinearLayout(ViewGroup).invalidateChild(View, Rect) line: 4012  
TextView(View).invalidate(boolean) line: 8515   
TextView(View).invalidate() line: 8466  
TextView.checkForRelayout() line: 6695  
TextView.setText(CharSequence, TextView$BufferType, boolean, int) line: 3256   
TextView.setText(CharSequence, TextView$BufferType) line: 3110 
TextView.setText(CharSequence) line: 3085   
MainActivity$Task.run() line: 53   
Thread.run() line: 856

wobei Zeile (line) 53 ist: textView1.setText(str_zahlen_ausgeben);

Damit hier keine unnötige Posten entstehen, ... um das Problem zu Lösen werde Dich bitten, das (die paar Zeilen) selber zu testen.

@Andreas S. Auf GUI Elemente kann nur vom ui thread aus zugegriffen werden. hmm - kannst Du mir das (im Bezug auf mein Problem) etwas vertiefen. - Danke.

LG Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Michele
  • Forum-Beiträge: 1.525

17.04.2014, 14:27:37 via Website

Hallo.

Ich denke du solltest erstmal das Grundwissen lernen.:) Eine LogCat wird immer generiert.

Wie Andreas S. schon sagte musst du es in einen Ui Thread packen. Dazu würde ich bei Google mal nachschauen.:)

Da gibt es sehr viele Erklärungen und Hilfen.

LG

Antworten
Georg C.
  • Forum-Beiträge: 235

17.04.2014, 15:22:40 via Website

Hallo, hmmmmm:

Ich denke du solltest erstmal das Grundwissen lernen.:) Eine LogCat wird immer generiert.

es ist mir bewusst, das mein Grundwissen was Andriod betrifft sehr eingeschränkt ist. Vieles verstehe ich nicht, möchte aber gerne lernen. Die rasante Android Entwicklung, hat (vermute ich) seinen Preis [viele Bugs]. Es ist nicht schlimm! - nun daran soll auch gearbeitet werden ... Lassen wir die Konversation / Diskussion darüber an Seite - ist é OT!

Michele,

ich wiederhole meine bitte es selber zu testen.

Dafür habe ich das -> "mein Problem" als Eclipse Projekt (Damit ich den Rad nicht neu erfinden muss, habe ein Tut als Vorlage benutzt.)

HIER das Eclipse Projekt

LG Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Michele
  • Forum-Beiträge: 1.525

17.04.2014, 15:28:26 via Website

Hallo.

Danke für dein Projekt.:) Aber warum hast du es nicht gleich Hochgeladen?

Ich werde das aber nicht Testen. Da du es lernen und verstehen sollst und nicht wir.:) Wir sagten dir ja schon woran es liegt oder liegen könnte.

Ohne LogCat wird das leider nicht.

Schaue dir das bitte mal an.

http://stackoverflow.com/questions/11140285/how-to-use-runonuithread

LG

Antworten
Georg C.
  • Forum-Beiträge: 235

19.04.2014, 00:25:04 via Website

Hallo,

@Michele ein Button Objekt, als Textanzeige zu missbrauchen ist bei mir - SORRY - inakzeptabel.

(Aber scheinbar sehr einfaches Vorgehen ... ) Habe ausprobiert - funktioniert! - Danke ... im meinem Fall wurde keine LogCat (was den Fehler verraten sollte) generiert, aber dass weißt Du ... .

@Andreas S. Ich bedanke mich für den Tipp.

Huuuujjjj, das UI Thread hat schon was! Ich habe mein Problem endlich beseitigt. Habe nicht gedacht, dass es so schwer wäre!

Irgendwie sagt mir meiner Erfahrung aus den Foren; ( .... und wie ... bzw. ... dann zeig uns den Ergebnis) Ob es etwas einfacher geht???

...

public void run() {

Message msg = handler.obtainMessage();
Bundle bundle = new Bundle();
String str_value =  Integer.toString(value);
bundle.putString("gen_value", str_value);
msg.setData(bundle);
writeMessagetoViev(msg);

}

...

private void writeMessagetoViev(Message msg) { Bundle bundle = msg.getData(); String string = bundle.getString("gen_value"); TextView myTextView = (TextView)findViewById(R.id.textView1); myTextView.setText(string); } ...

LG Georg

Ps. Mit (nicht nur ) dem Code Parser müsst Ihr was machen; - oder ich bin so doof, und kann ein Code nicht richtig einfügen?:?

— geändert am 19.04.2014, 01:09:13

Sorry für Gramatik & Stilistik Fehler.

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

19.04.2014, 11:54:01 via Website

Ja, das Codetool hier lässt zu wünschen übrig... Da können wir nichts machen.

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

Antworten
impjor
  • Forum-Beiträge: 1.793

19.04.2014, 15:53:40 via App

Du kannst es dir einfacher machen, in dem du zuerst einen Handler im UI Thread erzeugst (z.B. in onCreate()) und dann Handler#post benutzen:

deinHandler.post(new Runnable() {
void run() {
textView.setText(...);
}
}

Ps: Code kannst du zwischen diesen Hochkommata einfügen: `

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Georg C.

Antworten
Georg C.
  • Forum-Beiträge: 235

19.04.2014, 17:44:54 via Website

Vielen Dank!

Sorry für Gramatik & Stilistik Fehler.

Antworten
Daniel
  • Forum-Beiträge: 99

20.04.2014, 23:44:27 via App

Georg, ich bin wie du Anfänger, und lerne die letzten Wochen rasant mehr zu Android. Also: Es gibt den UI-Thread das ist praktisch dein Hauptprogramm, wenn du aber nen zweiten Thread erzeugst und dort textview ändern willst : GEHT NICHT. weil alles was mit gui buttons texte bilder zutun hat, läuft in diesem UI-Thread. so und wie erreiche ich nun diese gui? richtig, ich spreche den UI-Thread an , und wie geht das? 2 aspekte : 1. mit runOnUiThread oder was ich bevorzuge , Handler. So diesen Handler erzeugst du im UI-Thread z.B. im onCreate Handler handler = new Handler;

Handler sind praktisch wie Ansprechpartner zwischen Threads ^^

wenn du nun textview ändern willst, sprichst du im erzeugten zweiten thread ihn mit handler.post(Runnable) an ;) dann flutschts und der uithread kann reagieren ^^ hoffe ich habs noob freundlich erklärt :P

Antworten
Georg C.
  • Forum-Beiträge: 235

21.04.2014, 02:55:26 via Website

Hallo Daniel, der impjor hat mir zwar (mit seiner Antwort, die "Tür dazu" [zu dem UI Thread]) gezeigt, ... den UI- Thread -> (vermute ist das selber wie das Main- Thread der Gr. Java) werde ich mir schnellstmöglich "unter die Lupe" zu nehmen.

hoffe ich habs noob freundlich erklärt

Ja - Danke!

Ps. wie kann ich den Thread als beantworten "markieren"?

— geändert am 21.04.2014, 02:59:40

Sorry für Gramatik & Stilistik Fehler.

Antworten
Andy N.
  • Forum-Beiträge: 22.375

21.04.2014, 10:49:08 via Website

Hallo Georg,

Schön, dass du so schnell Hilfe bekommen konntest. Deinen Thread kannst du im Browser oben hinter dem blauen Button 'mehr' auf beantwortet setzen... Ich hab das aber mal für dich übernommen ;)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten