Integer Wert über ein TextView ausgeben!

C

coreytaylor211

Fortgeschrittenes Mitglied
5
Hallo zu beginn direkt mal der Code!
Code:
        @Override
        public void onClick(View v) 
        {
            // TODO: Implement this method
            EditText editText = (EditText) findViewById(R.id.programEditText1);
            TextView textView = (TextView) findViewById(R.id.textView1);
            int eingabe = Integer.valueOf(R.id.programEditText1);
            if (eingabe > 0){
                
                
                int sekbetrag = eingabe / 2678400;
                int ausgabe = sekbetrag * eingabe;
                for (int i = 0;ausgabe < eingabe ;i++)
                {    
                    String s = textView.getTag(ausgabe).toString();
                    
                    
                    textView.setText(s);
                    // es muss noch die timeUnit Funktion von 1 Sekunde eingebaut werden. Und die schleife richtig eingestllt werden.
                    try
                    {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e)
                    {
                        
                    }
                }
                
            }else{
                
                // Fehler abfangen!
            }
            
            
            
        }
Ich habe schon diverse andere Themen duchsucht aber irgendwie komme ich nicht auf das Ergebnis.
Hier einmal der Beitrag den ich versucht habe.
https://www.android-hilfe.de/forum/...schleife-in-textview-ausgeben-und.324419.html


Es wird einfach nix ausgegeben.:confused2:
Daher bitte ich um Hilfe danke.
 
Versuch mal folgendes

int eingabe = Integer.valueOf(editText.getText()) ;

Google hätte dir schneller geholfen als die Frage zu stellen.

Grüße
derjens
 
Hallo erstmal danke für die schnelle Hilfe aber,
derjens AW: Integer Wert über ein TextView ausgeben!
Versuch mal folgendes

int eingabe = Integer.valueOf(editText.getText()) ;

Google hätte dir schneller geholfen als die Frage zu stellen.

Grüße
derjens
ich möchte ja nicht das
Code:
eingabe
ausgegeben wird sondern
Code:
s
da ich ja noch ein Paar berechnungen damit machen möchte die jetzt noch nicht in dem Code enthalten sind.

Ich vermute das der Fehler irgendwo hier ist
String s = textView.getTag(ausgabe).toString();



textView.setText(s);
aber egal was ich da versuche es geht nicht. :unsure:
 
Hallo,
TextView.setText("Ergebnis: "+s);


Deine ganzen "Umtransformationen" sind unnötig und unnötige Fehlerquellen. Zur Not hilft ein Blick in die Dokumentation. ;-)

Ps: sorry, eben erst gesehen, dass es um die Eingabe von Daten geht :p

So jetzt wieder am richtigen PC und in der Lage auch nützliche Beiträge zu schreiben

Code:
Integer.parseInt(myEditText.getText().toString())

So wie du es aktuell machst, lädst du bestenfalls die ID (aus der R Klasse)...
 
Zuletzt bearbeitet:
Ich verstehe nicht so ganz was du für einen Tag aus der textView holen willst :confused2:

Code:
String s = textView.getTag(ausgabe).toString();

Was genau passiert denn bei deiner App ???
 
Zuletzt bearbeitet:
So Ich habe das jetzt mal versucht ohne einen String zu lösen.
Code:
                int sekbetrag = eingabe / 2678400;
                int ausgabe = sekbetrag * eingabe;
                for (int i = 0;ausgabe > eingabe ;i++)
                {    
                    int neueAusgabe = ausgabe  *i;
                    textView.setText(neueAusgabe);
                    
                    try
                    {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e)
                    {
                        
                    }
                }
@derjens - das mit dem Tag war ein Fehler von mir sorry hatte ich vergessen zu ändern.
Und zu deiner Frage was meine App machen soll, einfach einen Wert den ich eingegeben habe nach einer berechnung wieder ausgeben und zwar jede sekunde.
So da ich jetzt alles auf int habe müsste es doch jetzt eigendlich so gehen.(Aktueller Code siehe Anfang)

Natürlich geht es nicht. Habe diverse Bücher hier aber irgendwie gibt es 100 verschiedene lösungen die auch alle von Eclipse angenommen werden, aber etwas ausgeben macht er nicht...
 
Dein Java-foo braucht noch viel Übung!

Die Methoden setText(int) und setText(String) sind unterschiedliche Funktionen.

Das erste sucht eine Resource mit der Nummer, und füllt das Feld mit dem zugehörigen Text. Die zweite füllt den übergebenen Text dirket ein.

Wenn du also deine Zahl ausgeben willst, musst du sehr wohl eine Konvertierung nach String durchführen. ""+num wäre die einfachste.

Ausserdem: sowas wie Thread.sleep(1000) tut man nicht im UI Thread.
 
  • Danke
Reaktionen: ui_3k1
Ich wollte nicht wissen was deine App machen soll sondern was aktuell passiert.
Bleibt deine textView leer?? Was befindet sich in der Variable ausgabe??
Was zeigt die TextView an?? etwa 0 ??

Wenn ich das jetzt richtig verstanden habe passiert folgendes:

Angenommen du gibst bei deinem editText feld 20 ein.
Dann hollst du dier den Wert von editText und speicherst ihn in eingabe.
Jetzt teilst du eingabe, also in diesem fall 20 / 2678400 (ist ca 0,00000746)
und speicherst das in sekbetrag. Da sekbetrag aber ein int ist wird da wohl 0 drin sein.
Dann multiplizierst du sekbetrag mit eingabe ( also 0 * 20) was wieder 0 ergibt
und speicherst das in ausgabe. Jetzt trittst du in die Schleife ein solange ausgabe > eingabe ist ( 0 > 20).
Das ist aber nicht der Fall. Ist also nix mit schleife.

Ich würde dir mal folgendes empfehlen.
Füge mal an diversen stellen eine LogCat ausgabe ein
Code:
Log.d("DEBUG", "eingabe = " + eingabe );
und schau dir die werde für eingabe, ausgabe, sekbetrag und neueAusgabe im LogCat an.

Grüß
derjens
 
Zuletzt bearbeitet:
Hallo @coreytaylor211

das sieht aus wie eine Wecker. Du stellt auf einem Schieber eine Zeit zwischen einer Sekunde und 31 Tage. Wenn du nicht jede Sekunde darstellen willst, gibt es eine stromsparende und sichere Methode.

https://developer.android.com/training/scheduling/alarms.html


Und wie schon gesagt, das mit den sleep im UIThread ist keine gute Idee. Denn solange wartet dein Programm, im schlimmsten (und wahrscheinlichsten) Fall stürzt die App einfach ab. ;) .
 
Zuletzt bearbeitet:
So einmal nerve ich euch noch mal, wenn es dann nicht geht muss ich mal schauen.

Hier einmal der ganze Code
Code:
import android.os.*;
import android.util.Log;
import android.view.*;
import android.view.View.*;
import android.widget.*;

public class program extends MainActivity implements OnClickListener 
{
    
    

    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.program);
    }
    
        @Override
        public void onClick(View v) 
        {
            // TODO: Implement this method
            EditText editText = (EditText) findViewById(R.id.programEditText1);
            TextView textView = (TextView) findViewById(R.id.textView1);
            int eingabe = Integer.valueOf(R.id.programEditText1);
            Log.d("DEBUG", "eingabe = " + eingabe );
            if (eingabe > 0){
                
                
                int sekbetrag = eingabe / 2678400;
                int ausgabe = sekbetrag * eingabe;
                Log.d("DEBUG", "eingabe = " + eingabe );
                Log.d("Debug", "ausgabe = " + ausgabe);
                for (int i = 0;ausgabe < eingabe ;i++)
                {    
                    int s = ausgabe * i ;
                    Log.d("DEBUG", "eingabe = " + eingabe );
                    
                    Integer.toString(s);
                    textView.setText(s);
                    
                    try
                    {
                        Thread.sleep(1000); // kommt noch weg.
                    }
                    catch (InterruptedException e)
                    {
                        
                    }
                }
                
            }else{
                
                // Fehler abfangen!
            }
            
            
            
        }
        
        
        
}
Vielen Dank für eure Geduld.
Ich denke mal ich werde etwas wichtiges vergessen haben, aber ich komm einfach nicht drauf. Wenn ich die App Starte und dann eine Zahl in das edittext Feld eingebe sollten ja eigendlich LogCat meldungen kommen was Sie aber nicht machen.
Mir kommt es so vor als übergibt er die Zahl garnicht erst.
 
Ich hatte vorhin schon mal geschrieben das du die eingabe aus dem EditText gar nicht ausliest.

anstelle von
Code:
int eingabe = Integer.valueOf(R.id.programEditText1);
muss folgendes stehen
Code:
int eingabe = Integer.valueOf(editText.getText().toString) ;
editText ist ja der EditText den du mit findViewById gefunden hast.

deine schleife ist auch ehr komisch.
Code:
for (int i = 0;ausgabe < eingabe ;i++)
die Bedingung ist entweder immer oder nie erfüllt da du weder ausgabe noch eingabe veränderst.

Und wie markus.tullius schon sagte, was löst deinen OnClickListener denn überhaupt aus??

Du solltest dir vielleicht noch mal grundlegende Gedanken machen.

grüße
derjens
 
Code:
int sekbetrag = eingabe / 2678400; 
int ausgabe = sekbetrag * eingabe;
dann ist die Ausgabe:

ausgabe = eingabe * (eingabe / 2.678.400);

Der Integerwert von R.id.programEditText1 dürfte größer als 2.678.400 sein.

Dann ist die ausgabe > eingabe. Das heißt, die For-Schleife wird nicht ausgeführt, da die Bedingung nicht erfüllt ist (ausgabe<eingabe).
Da sich deine Textausgabe im Block der Schleife befindet, wird diese auch nicht ausgeführt. Also ist alles Okay, kein Fehler ;)
 
Hi, ich habe jetzt mal alle eure Anweisungen durchgeführt.
Der aktuelle Code ist
Code:
public class program extends MainActivity implements OnClickListener
{
    


    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.program);
        Button button7 = (Button) findViewById(R.id.button1);
        button7.setOnClickListener(this);
    }
    
        @Override
        public void onClick(View v) 
        {
            // TODO: Implement this method
            EditText editText = (EditText) findViewById(R.id.programEditText1);
            TextView textView = (TextView) findViewById(R.id.textView1);
            double eingabe = Integer.valueOf(editText.getText().toString());
            Log.d("DEBUG", "eingabe = " + eingabe );
            if (eingabe > 0){
                
                
                
                double ausgabe = eingabe * (eingabe / 2678400); // noch schnell geändert
                Log.d("DEBUG", "eingabe = " + eingabe );
                Log.d("Debug", "ausgabe = " + ausgabe);
                for (int i = 0;ausgabe < eingabe ;i++)
                {    
                    int s = (int) (ausgabe * i) ;
                    Log.d("DEBUG", "eingabe = " + eingabe );
                    
                    //Integer.toString(s);
                    Log.d("Debug", "ausgabe = " + ausgabe);
                    textView.setText(s);
                    
                    try
                    {
                        //Thread.sleep(1000);
                        synchronized(this){
                            wait(1000);
                        }
                        
                    }
                    catch (InterruptedException e)
                    {
                        
                    }
                }
                
            }else{
                
                // Fehler abfangen!
            }
            
            
            
        }
        
        
        
}
LogCat gibt jetzt auch was aus :
Code:
09-13 11:15:29.110: D/DEBUG(20332): eingabe = 65.0
09-13 11:15:29.120: D/Debug(20332): ausgabe = 0.0015774342891278375
also soweit so gut aber eine ausgabe auf dem Display passiert leider immer noch nicht.
Laut LogCat läuft die Schleife. Ich habe jetzt nicht die ganzen LogCat Meldungen hier rein geschrieben.

Vielen Dank schonmal für eure Geduld.
 
Zuletzt bearbeitet:
Da sich deine Textausgabe im Block der Schleife befindet, wird diese auch nicht ausgeführt.

Du muss textView.setText(...); außerhalb der Schleife ausführen, da die Schleife nicht durchlaufen wird.
Am besten fügst du folgende Zeile vor der Schleife ein:
Code:
[I]textView.setText(ausgabe);[/I]
PS: Du solltest vielleicht mit etwas einfachen wie Android anfangen, wie z.B, mit dem klassischen Java.
 
  • Danke
Reaktionen: derjens
Warum sollte die Schleife nicht durchlaufen ???
Code:
09-13 11:15:29.110: D/DEBUG(20332): eingabe = 65.0 09-13 11:15:29.120: D/Debug(20332): ausgabe = 0.0015774342891278375
ausgabe < eingabe Aber ich habe es jetzt hinbekommen. Vielen Dank nochmal für eure Hilfe.:thumbsup:
Hier mal wie es jetzt aussieht
Code:
public class program extends MainActivity implements OnClickListener
{
    


    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.program);
        Button button7 = (Button) findViewById(R.id.button1);
        button7.setOnClickListener(this);
    }
    
        @Override
        public void onClick(View view) 
        {
            // TODO: Implement this method
            double eingabe;
            EditText editText = (EditText) findViewById(R.id.programEditText1);
            TextView textView = (TextView) findViewById(R.id.textView1);
            ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView1);
            if (editText.getText().toString().length() == 0){
                return;
            }
            eingabe = Integer.parseInt(editText.getText().toString());
            Log.d("DEBUG", "eingabe = " + eingabe );
            if (eingabe > 0){
                
                
                
                double ausgabe = eingabe * (eingabe / 2678400);
                Log.d("DEBUG", "eingabe = " + eingabe );
                Log.d("Debug", "ausgabe = " + ausgabe);
                for (double i = 0;ausgabe < eingabe;i++)
                {    
                    double s ;
                    ausgabe = ausgabe + ausgabe * i;
                    Log.d("Debug", "ausgabe nach Schleife  ausgabe= " + ausgabe);
                    s =  ausgabe;
                    Log.d("DEBUG", "eingabe = " + eingabe );
                    Log.d("Debug", "ausgabe nach Schleife s = " + s);
                    
                    Log.d("Debug", "ausgabe = " + ausgabe);
                    //s = System.currentTimeMillis() ;
                    textView.setText(String.valueOf(s));
                    

                }
                
            }else{
                
                // Fehler abfangen!
            }
            
            
            
        }
        
        
        
}
 
gib doch mal "100000000000000000000000000" ein :D (ohne Anführungszeichen)

Vermutlich gibt es eine ganze Reihe an Anwendungen, die diese Stresstests nicht überstehen :)
 

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
288
RalfKahl
R
Muecke1982
Antworten
8
Aufrufe
1.032
Skyhigh
Skyhigh
5
Antworten
22
Aufrufe
1.417
590239
5
Zurück
Oben Unten