Wo und in wecher Sprache Programmierst du den sonst?
editText durch zwei Textwatcher untersuchen lassen
-
-
garkeine und garnicht, ich bin Maschinenbaustudent, aber hab die Aufgabe auferlegt bekommen, obwohl keiner aus unserem Team Java kann
-
Und dann auch noch auf einen so sonderbaren Framework wie Android.
Wie ich schon am Anfang sagte halte ich deinen Lösungsansatz für nicht sehr sinnvoll.
Überdenke ihn noch mal .Was willst du eigentlich machen?
wenn es eine Zeiterfassung werden soll ist eigentlich eine DatenBank das Herzstück.
Ich würde Alle eingaben in die DB machen und diese dann abfragen und anzeigen und zwar mit ListViews.Wehr gibt einen der von Programmierung keine oder nur sehr wenig ahnung hat so eine Aufgabe?
-
Die Grundidee ist Folgende:
Ein Arbeiter kriegt ein Tablet mit der App in die Hand gedrückt und soll über den Tag verteilt seine bearbeiteten Aufträge mit Maschinentyp, Start- und Endzeit und Kommentaren angeben.
Am Ende speichert er alles und sendet seine Daten an die Datenbank.
Nun will ich halt, dass er keinen Unsinn in die Zeitspalten eintragen kannIch hab gerade mal getestet, es liegt definitiv an
Code
Alles anzeigenpublic void afterTextChanged(Editable editable) { EditText txt3 = (EditText) ze.lastRow.getChildAt(3); EditText txt4 = (EditText) ze.lastRow.getChildAt(4); String str = txt3.getText().toString(); if(!str.equals("")) { String[] parts = str.split(":"); String part1 = parts[0]; String part2 = parts[1]; int hours = Integer.parseInt(part1); int minutes= Integer.parseInt(part2); if (hours>=0 || hours<24) { return; } else txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); if (minutes>=0 || minutes<60) { return; } else txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); }
ich habe dazu die Einträge, die eine neue Zeile einbringen, mal rausgenommen, sodass in der MainActivity nur noch stand
Code
Alles anzeigenpackage com.example.cris.zeiterfassungv2; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; import android.view.inputmethod.EditorInfo; import android.widget.EditText; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.Toast; public class MainActivity extends AppCompatActivity { public TableRow lastRow; public newRowTextWatcher tw;{ tw= new newRowTextWatcher(this);} public Sum sum;{ sum= new Sum(this);} /* public Time24hFormatValidator time24;{ time24 = new Time24hFormatValidator(this );}*/ public void AddRow() { TableRow row = new TableRow(MainActivity.this); EditText txt1 = new EditText(MainActivity.this); EditText txt2 = new EditText(MainActivity.this); EditText txt3 = new EditText(MainActivity.this); EditText txt4 = new EditText(MainActivity.this); EditText txt5 = new EditText(MainActivity.this); EditText txt6 = new EditText(MainActivity.this); EditText txt7 = new EditText(MainActivity.this); row.addView(txt1); row.addView(txt2); row.addView(txt3); row.addView(txt4); row.addView(txt5); row.addView(txt6); row.addView(txt7); txt1.setBackgroundResource(R.drawable.cellshape); txt2.setBackgroundResource(R.drawable.cellshape); txt3.setBackgroundResource(R.drawable.cellshape); txt4.setBackgroundResource(R.drawable.cellshape); txt5.setBackgroundResource(R.drawable.cellshape); txt6.setBackgroundResource(R.drawable.cellshape); txt7.setBackgroundResource(R.drawable.cellshape); txt1.setInputType(InputType.TYPE_CLASS_TEXT); txt2.setInputType(InputType.TYPE_CLASS_TEXT); txt3.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME); txt4.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME); txt5.setInputType(InputType.TYPE_CLASS_NUMBER); txt6.setInputType(InputType.TYPE_CLASS_TEXT); txt7.setInputType(InputType.TYPE_CLASS_TEXT); /* txt3.addTextChangedListener(time24); txt4.addTextChangedListener(time24);*/ TableLayout table = (TableLayout) findViewById(R.id.tabelle); table.addView(row); lastRow = row; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tw = new newRowTextWatcher(this); /* time24 = new Time24hFormatValidator(this);*/ lastRow = (TableRow) findViewById(R.id.firstRow); EditText txt1 = (EditText) findViewById(R.id.etOrderNo); EditText txt2 = (EditText) findViewById(R.id.etMachineID); EditText txt3 = (EditText) findViewById(R.id.etstarttime); EditText txt4 = (EditText) findViewById(R.id.etendtime); EditText txt5 = (EditText) findViewById(R.id.etdecimaltime); EditText txt6 = (EditText) findViewById(R.id.etrework); EditText txt7 = (EditText) findViewById(R.id.etstatus); txt3.addTextChangedListener(new Time24hFormatValidator(this)); txt4.addTextChangedListener(new Time24hFormatValidator(this));
-
Na dann noch viel Spaß Bin auf das fertige Produkt gespannt.
-
ja, ich befürchte fast, dass ich da nie hinkomme
wo kann denn hier der Wurm sein?
Code
Alles anzeigenpublic void afterTextChanged(Editable editable) { EditText txt3 = (EditText) ze.lastRow.getChildAt(3); EditText txt4 = (EditText) ze.lastRow.getChildAt(4); String str = txt3.getText().toString(); if(!str.equals("")) { String[] parts = str.split(".\\[0-9]"); String part1 = parts[0]; String part2 = parts[1]; int hours = Integer.parseInt(part1); int minutes= Integer.parseInt(part2); if (hours>=0 && hours<=23) { return; } else txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); if (minutes>=0 && minutes<60) { return; } else txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show();
-
Ok werde es am we vielleicht mal testen, u d dein Projekt laden.
Wie gesagt finde ich den ansatz total ungünstig für dein Vorhaben. Und was hast du wenn das leuft auch nicht viel. Ok an Erfahrung gewonnen. Eingaben macht man in eine DB und man prüft sie vorher. Zeit Eingaben wurde ich mir den timepicker machen zb. -
Hatte schon mal gefragt ob der Code auch ausgeführt wird woher weißt du das. Log Zeilen hast du ach keine in deinen Code die es dir verraen können.
-
Mache dich mit dem Debugger vertraut links hast du.
-
das wäre ein Debug der App mit Breakpoint an der Zeile
-
Ok du hast einen breackpoint Sinnvoller ist es den in die Klasse zu setzen nicht in der Main. Zu schauen ob da auch deine ze variable den richtigen Kontext hat. Und somit deine text3 auch das was du eingegeben hast auch bekommt. Du kannst deinen Code auch im einzel Schritt durcharbeiten und die die Variablen anschauen.
-
Schön wäre auch wenn du fragen die ich stelle beantwortest. Schreibe das nur am Handy ohne Android studio.
-
Schön wäre auch wenn du fragen die ich stelle beantwortest. Schreibe das nur am Handy ohne Android studio.
selbstverständlich, tut mir leid
ich bin nur hier ein wenig im Java-Salat verloren, weswegen ich oft nicht direkt weiß, was du meinst -
hab jetzt mal spaßeshalber den TimeFormat-Part mit in den NewRowWatcher gepackt ala
Code
Alles anzeigenpackage com.example.cris.zeiterfassungv2; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.Toast; public class newRowTextWatcher implements TextWatcher { MainActivity ze; public newRowTextWatcher(MainActivity Zeiterfassung) { ze = Zeiterfassung; } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { EditText txt1 = (EditText) ze.lastRow.getChildAt(0); EditText txt2 = (EditText) ze.lastRow.getChildAt(1); EditText txt3 = (EditText) ze.lastRow.getChildAt(2); EditText txt4 = (EditText) ze.lastRow.getChildAt(3); EditText txt5 = (EditText) ze.lastRow.getChildAt(4); EditText txt6 = (EditText) ze.lastRow.getChildAt(5); EditText txt7 = (EditText) ze.lastRow.getChildAt(6); if (txt1.getText().toString().equals("") && txt2.getText().toString().equals("") && txt3.getText().toString().equals("") && txt4.getText().toString().equals("") && txt5.getText().toString().equals("") && txt6.getText().toString().equals("") && txt7.getText().toString().equals("")) { return; } else{ String str1 = txt3.getText().toString(); String str2 = txt4.getText().toString(); if(!str1.equals("")) { String[] parts = str1.split(".\\[0-9]"); String part1 = parts[0]; String part2 = parts[1]; int hours = Integer.parseInt(part1); int minutes= Integer.parseInt(part2); if (hours>=0 && hours<=23) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } if (minutes>=0 && minutes<60) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } } if(!str2.equals("")) { String[] parts = str2.split(".\\[0-9]"); String part3 = parts[0]; String part4 = parts[1]; int hours = Integer.parseInt(part3); int minutes= Integer.parseInt(part4); if (hours>=0 && hours<=23) { return; } else { txt4.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } if (minutes>=0 && minutes<60) { return; } else { txt3.setText(""); Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show(); } } //ze.AddRow(); }}}
Resultat beim DebuggenCode
Alles anzeigenFATAL EXCEPTION: main Process: com.example.cris.zeiterfassungv2, PID: 12993 java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.example.cris.zeiterfassungv2.newRowTextWatcher.afterTextChanged(newRowTextWatcher.java:56) at android.widget.TextView.sendAfterTextChanged(TextView.java:9380) at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:11939) at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1262) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:574) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:504) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:502) at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:131) at android.widget.TextView.doKeyDown(TextView.java:7318) at android.widget.TextView.onKeyDown(TextView.java:7095) at android.view.KeyEvent.dispatch(KeyEvent.java:2691) at android.view.View.dispatchKeyEvent(View.java:11713) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.widget.HorizontalScrollView.dispatchKeyEvent(HorizontalScrollView.java:362) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:389) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1834) at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:440) at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1819) at android.app.Activity.dispatchKeyEvent(Activity.java:3267) at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316) at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:354) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4733) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4605) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4293) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4350) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6661) at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:6635) at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:6596) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3930) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
-
so was steht nun in dem String "String str = txt3.getText().toString();" ist es das was du eingegeben hast?
-
so was steht nun in dem String "String str = txt3.getText().toString();" ist es das was du eingegeben hast?
da ich im Debug Mode war, konnte ich nichts eingeben
jedoch hatte ich beim Starten auf "1" gedrückt, und das hatte er wohl gespeichert
wie man im Debug Mode Werte eingibt, da les ich mich noch durch
Im normalen Modus crasht die App, sobald ich was ins Feld txt3 eingeben will -
das es crasht ist doch schon mal eine Aussage.
-
wie ich schon in einen früheren Beispiele geschrieben habe bin ich mir mit diesem Code nicht sicher
- MainActivity ze;
- public newRowTextWatcher(MainActivity Zeiterfassung) {
- ze = Zeiterfassung;
- }
mainactivity ist nicht richtig müsste Context heißen.
Und wie gesagt beim Aufruf aus der Main kann es auch getApplicationContext() anstatt this sein -
was soll das
- Toast.makeText(ze.getApplicationContext(), "Wrong", Toast.LENGTH_LONG).show();
Ist totaler mist.
-
wo in welcher Zeile bricht die App ab?
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!