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

Textdatei einlesen und Werte in den Spinner einfügen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von zblack, 16.11.2011.

  1. zblack, 16.11.2011 #1
    zblack

    zblack Threadstarter Gast

    Hallo Android Freunde,
    ich wollte eine txt Datei einlesen lassen und die Werte in den Spinner einfügen damit ich dann eins von den auswählen kann.
    Dazu habe ich folgende Klasse gebaut:
    Code:
    public class EinstellungenActivity extends Activity {
        private ArrayAdapter<CharSequence> adapter2;
        private Spinner reifenmarken;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.einstellungen);
    
            reifenmarken = (Spinner) findViewById(R.id.sr_marke);
            try{
                FileReader fileReader;
                String[] y = new String[40];
                fileReader = new FileReader("test.txt");
    
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String x = bufferedReader.readLine();
                int anz = 0;
    
                while (x != null) {
    
                    x = bufferedReader.readLine();
                    anz++;
                    y[anz] = x;
                }
                bufferedReader.close();
                adapter2 = new ArrayAdapter<CharSequence>(this,
                        android.R.layout.simple_spinner_item, y);
             adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                reifenmarken.setAdapter(adapter2);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    
    bei der Ausführung wird kein Fehler ausgegeben aber der Inhalt der Datei wird im Spinner nicht angezeigt.
    MfG.
     
  2. Tom299, 16.11.2011 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    ich hab mit CharSequence noch nie gearbeitet und weiß nicht, inwieweit das kompatibel mit deinem String-Array ist. aber wenn man ein String-Array nimmt, sollte man das auch in den Adapter stecken.

    also kannste zum Testen mal adapter2 = new ArrayAdapter<String> versuchen, vielleicht liegts ja daran.
     
  3. zblack, 16.11.2011 #3
    zblack

    zblack Threadstarter Gast

    naja, wenn ich einfach String [] x = {"fd", "fdkjfdkfjd", "fdkjfdkjfdkjfdkjgfhj"} nehme und dann den string x in den adapter einsetze
    also so:
    adapter2 = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, x); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); reifenmarken.setAdapter(adapter2);

    dann funktioniert es. Wenn ich die Datei einlese, funktioniert es aber nicht
     
  4. swordi, 16.11.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    das kommt mir irgendwie falsch vor

    du machst ein readline
    checkst auf null und machst gleich wieder ein readline

    somit wird die 1. zeile nie gelesen. ist das gewollt ?

    dazu wird auch in y[0] niemals was geschrieben. du beginnst nämlich mit 1
     
  5. Tom299, 16.11.2011 #5
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    also das anz++ muß hinter die zuweisung y[anz]=x sonst fängst du mit y[1] an und nicht mit y[0].

    außerdem wird dein x in der schleife nicht auf null abgefragt und du machst die zuweisung.

    also ich würd die schleife so schreiben:
    Code:
        while ((x = bufferedReader.readLine()) != null) {
            y[anz] = x;
            anz++;
        }
    
     
  6. zblack, 16.11.2011 #6
    zblack

    zblack Threadstarter Gast

    hmm, es funktioniert immer noch nicht.
    der code sieht jetzt so aus, aber im spinner is immer noch nix.
    die schleife habe ich verändert .
    Code:
    public class EinstellungenActivity extends Activity {
    
        private ArrayAdapter<String> adapter2;
        private Spinner reifenmarken;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.einstellungen);
    
            reifenmarken = (Spinner) findViewById(R.id.sr_marke);
            
            String line;
            try{
                FileReader fileReader;
                String[] y = new String[40];
                fileReader = new FileReader("test.txt");
    
                BufferedReader bufferedReader = new BufferedReader(fileReader);
                String x;
                int anz = 0;
    
                while ((x = bufferedReader.readLine()) != null) {
                    y[anz] = x;
                    anz++;
                }
                bufferedReader.close();
                adapter2 = new ArrayAdapter<String>(this,
                        android.R.layout.simple_spinner_item, y);
             adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                reifenmarken.setAdapter(adapter2);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }     
        }
    }
    
    wo soll die Datei eigentlich liegen ? ich habe die jetzt einfach in den Projekt gelegt. da wo die ManifestDatei liegt. Obwohl wenn die Datei nich da wäre, dann sollte eigentlich eine Fehlermeldung kommen, kommt aber nicht.
     
  7. swordi, 16.11.2011 #7
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm hast überhaupt was in deiner test.txt?

    denn da hätte es vorher schon abstürzen sollen, wenn da überhaupt was gelesen werden würde.

    check das nochmal
     
  8. zblack, 16.11.2011 #8
    zblack

    zblack Threadstarter Gast

    in der datei ist das drin :
    hallo
    wie
    gehts
    dir
    aaaaa

    genau so geschrieben
     
  9. Tom299, 16.11.2011 #9
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    und hast du mal debuggt, ob du die datei auch wirklich liest? zumindest das lesen und zuweisen in deine x-variable müßte ja stimmen.
     
  10. DieGoldeneMitte, 16.11.2011 #10
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Vielleicht ist die Liste ja sogar ganz normal da und zeigt nur die vielen null Strings vom Ende des Arrays y an.
    Denn 40 Zeilen hat deine test.txt ja offenbar nicht.
     
  11. zblack, 16.11.2011 #11
    zblack

    zblack Threadstarter Gast

    ich habe grade die Ausgaben der LogCat durchgeguckt und habe eine warning gefunden : FileNotFoundException : /test.txt no such File or directory. Habe eigentlich gedacht dass die Meldung in den Errors sein muss. Die Datei ist eigentlich im Projekt drin
     
    Zuletzt von einem Moderator bearbeitet: 16.11.2011
  12. swordi, 16.11.2011 #12
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    dann leg die datei mal in den assets ordner und benutze den assetmanager

    dann wirds besser klappen
     
  13. zblack, 16.11.2011 #13
    zblack

    zblack Threadstarter Gast

    habe die Datei jetzt in assets ordner eingefügt. und den code umgebaut
    Code:
        try{
                String[] y = new String[40];
                AssetManager manager = getResources().getAssets();
                InputStream stream = manager.open("test.txt");
                BufferedReader bufferedReader = new BufferedReader(
                        new InputStreamReader(stream));
                String x;
                int anz = 0;
    
                while ((x = bufferedReader.readLine()) != null) {
                    y[anz] = x;
                    anz++;
                }
                bufferedReader.close();
                stream.close();
                adapter2 = new ArrayAdapter<CharSequence>(this,
                        android.R.layout.simple_spinner_item, y);
             adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setAdapter(adapter2);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
    jetzt wird da nur erste zeile der Datei im Spinner angezeigt. wenn ich aber auf den Spinner klicke, stürzt die App wegen NullPointer ab. das wird auch in LogCat angezeigt.
     
  14. swordi, 16.11.2011 #14
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    na immerhin wird schonmal was angezeigt :D

    jetzt musst halt dem nullpointer nachgehen. wird sicher auch zu finden sein
     
  15. Tom299, 16.11.2011 #15
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    einfaches Beispiel:
    Code:
    		String[] y = new String[10];
    		y[0] = "A";
    		y[1] = "B";
    		y[2] = "C";
    		y[3] = "D";
    		y[4] = "E";
    		y[5] = "F";
    		for (int i=0;i<10;i++) {
    			System.out.println(y[i]);
    		}
    
    Wenn du verstehst, warum es hier zu einer NullPointerException kommt, dann findest du auch den Fehler in deinem Code :flapper:
     
  16. zblack, 16.11.2011 #16
    zblack

    zblack Threadstarter Gast

    ja weil hier dat feld ne grosse von 10 hat und ich da nur 6 werte eintrage. dann will ich aber immer noch 10 werte ausgeben und weil es nur 6 werte drin sind, explodiert das programm mit ner NULL excp. Ach , dann muss ich für das Feld erstmal die Anzahl der Zeilen in der Datei ermitteln und dann dieses Feld mit der ermittelten grosse anlegen und dann funktionierts . also grund: falsche felddemension
     
    Zuletzt von einem Moderator bearbeitet: 16.11.2011
  17. Tom299, 16.11.2011 #17
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    das sind bei mir keine 40 Einträge, oder? :cool2:
     
  18. zblack, 16.11.2011 #18
    zblack

    zblack Threadstarter Gast

    hast recht. grund für den Fehler ist falsche felddemension.
     
  19. Tom299, 16.11.2011 #19
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    genau ;-)

    und um das zu vermeiden nimmst du am besten eine ArrayList, da brauchst du nicht mit hochzuzählen und fügst einfach mit .add() deinen wert in der schleife ein.
     
  20. zblack, 16.11.2011 #20
    zblack

    zblack Threadstarter Gast

    cool. vielen dank für die Hilfe
     

Diese Seite empfehlen