Inhalt einer EditTextBox in Array schreiben und in ListView ausgeben

  • Kurze Allgemeinbeschreibung:
    Ich "spiel" mit einem Android Gerät mit Barcode-Leser herum.
    Ich hab eine Erfassen.xml, in der oben die Barcodes in eine EditTextBox eingelesen werden und darunter in einer ListView ausgegeben werden sollen. Am Ende soll das das in der ListView steht, auf Buttonklick, in eine Datei gespeichert werden. (so weit bin ich aber noch nicht)
    Ich hänge daran, dass die Barcodes in die ListView geschrieben werden. Problematisch ist schon, wenn man 2 Barcodes hintereinander scannt, die einfach hintereinander weg geschrieben werden.


    Ich hab diverse Lösungsansätze probiert


    Das war der erste (noch ohne ListView als Ausgabe, sondern EditTextBox als Ausgabefeld)


    Code
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    //            	input = barcode.getText().toString();//	            ausgabe.setText(input.toString());
                	}            	                                     @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }             			@Override			public void afterTextChanged(Editable s) {				// TODO Automatisch generierter Methodenstub							}        }); 		}



    Da eben das Problem, das Barcodes einfach hintereinander weggeschrieben werden. Dann kam ich auf die Idee mit dem Array und hab da folgendes gebastelt:


    Code
    public void onTextChanged(CharSequence s, int start, int before, int count) {
                	FileInputStream fis = openFileInput(input);            	try {            		 String line, temp="";                         ArrayList<String> barcodeinput = new ArrayList<String>();            		 int i=0;                     DataInputStream dis = new DataInputStream(fis);                                          while((line = dis.readLine()) != null){                    	                     	i++;                     	if(i%2 == 0){                                 temp=temp+"\n"+line;                    		 barcodeinput.add(temp);                                 temp="";                     	}                        temp=line;                     }
            fis.close();        ListAdapter ladapt = new ArrayAdapter<String>(Erfassen.this, android.R.layout.simple_list_item_1, barcodeinput);        ListView lv = (ListView) findViewById(R.id.listView1);        lv.setAdapter(ladapt);            	}            	            	finally {}            	}            	                                     @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }             			@Override			public void afterTextChanged(Editable s) {				// TODO Automatisch generierter Methodenstub							}        });		}


    Jedoch krieg ich im o.g. Ausschnitt folgende Fehlermeldung:


    Der Konstruktor ArrayAdapter<String>(new TextWatcher(){}, int, ArrayList<String>) ist nicht definiert (undefined)


    Lt. Google hab ich schon probiert, "this" durch "myActivity.this" zu ersetzen. Dann ist der Fehler zwar weg, jedoch schlagen dann


    Code
    FileInputStream fis = openFileInput(input);
    while ((line = dis.readLine()) != null)
    fis.close();



    alarm:


    openFileInput(input) meldet Nicht behandelter Ausnahmebedingungstyp (exception type) FileNotFoundException


    Die beiden anderen warnen mit: Nicht behandelter Ausnahmebedingungstyp (exception type) IOException


    Kann jemand weiter helfen?


    Oder in ich da auf komplett falschem Fuß?

  • Der ArrayAdapter benötigt ja einen Kontext.
    Du gibst ihm offenbar das XML. Das kann eigentlich nicht klappen.


    Generell solltest Du das Array und die ganzen Schreibe- und Lesevorgänge in der Activity abarbeiten, nicht in der überschriebenen Methode.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • In Codebeispielen habe ich das so gefunden, daher hab ich das ausprobiert. Welchen Kontext soll ich ihm denn übergeben?
    Selbst wenn ich das ganze in die Activity, statt in die Methode packe, läuft es so nicht (was ja aber wohl an der Parameterübergabe liegt).

  • OK, quatsch. Hatte n Denkfehler drin.
    Hab jetzt alles in die Activity selbst verschoben. dann tritt wieder Problem Nummer 2 auf, dass er bei hierbei meckert:


    Code
    FileInputStream fis = openFileInput(input);
    while ((line = dis.readLine()) != null)
    fis.close();



    openFileInput(input) meldet Nicht behandelter Ausnahmebedingungstyp (exception type) FileNotFoundException


    Die beiden anderen warnen mit: Nicht behandelter Ausnahmebedingungstyp (exception type) IOException

  • Den FileInputStream etc bräuchte ich ja eigentlich nicht, da ja sowieso nur aus einer EditTextBox gelesen werden soll...Nun sieht das ganze so aus:

    Code
    public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.barerfassen);    EditText barcode = (EditText) findViewById(R.id.barcodes);	 //String input;	 //FileInputStream fis = openFileInput(input);  try {  String line = barcode.getText().toString(), temp="";  ArrayList<String> barcodeinput = new ArrayList<String>(); int i=0;  //DataInputStream dis = new DataInputStream(fis);  while(line != null){ i++;  if(i%2 == 0){  temp=temp+"\n"+line;            		 barcodeinput.add(temp);                         temp="";             	}  temp=line;             }
    //fis.close();
    
    
    ListAdapter ladapt = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, barcodeinput);
    ListView lv = (ListView) findViewById(R.id.listView1);lv.setAdapter(ladapt);    	}  finally {}



    Werden auch keine Fehler mehr angezeigt, jedoch wenn ich nun "Erfassen" aufrufe, stürzt die App ab und in der LogCat steht
    FATAL EXCEPTION: main
    java.lang.OutOfMemoryError: [memory exhausted]


    Hilfeeee :-/

  • Oha.


    Also Dein FileInputStream stürzt ab, weil es die zu öffnende Datei nicht finden kann.


    Womit Du Dir jetzt aber Deinen Speicher vollknallst kann ich so nicht ersehen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • In dem Zusammenhang zwei Tipps:


    Statt 'Editor' die 'Quellcode' Ansicht nutzen, dann passt das mit den Zeilenumbrüchen meistens.
    Auskommentieren ist unübersichtlich, den ganzen Kram einfach löschen ist eine bessere Idee.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«


  • Dann hier nochmal mit gelöschtem "auskommentierten" und aus dem HTML-Editor :)

  • Fast richtig.
    Vorher gab es das Problem nicht, weil Dir die App mit einer FileNotFoundException abgeschmiert ist.
    Dementsprechend kann sie nie an den Punkt gekommen sein, an dem Dir der Speicher aus geht. ;)


    Poste doch mal den gesamten LogCat Auszug mit der OutOfMemory Exception, vielleicht hilft das weiter.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!