Textdatei einlesen und Werte in den Spinner einfügen

Z

zblack

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.
 
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.
 
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
 
String x = bufferedReader.readLine();
int anz = 0;

while (x != null) {

x = bufferedReader.readLine();
anz++;
y[anz] = x;
}

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
 
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++;
    }
 
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.
 
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
 
swordi schrieb:
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
in der datei ist das drin :
hallo
wie
gehts
dir
aaaaa

genau so geschrieben
 
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.
 
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.
 
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 bearbeitet von einem Moderator:
dann leg die datei mal in den assets ordner und benutze den assetmanager

dann wirds besser klappen
 
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.
 
na immerhin wird schonmal was angezeigt :D

jetzt musst halt dem nullpointer nachgehen. wird sicher auch zu finden sein
 
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:
 
Tom299 schrieb:
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:
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 bearbeitet von einem Moderator:
Tom299 schrieb:
das sind bei mir keine 40 Einträge, oder? :cool2:

hast recht. grund für den Fehler ist falsche felddemension.
 
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.
 
cool. vielen dank für die Hilfe
 

Ähnliche Themen

H
Antworten
2
Aufrufe
1.282
Hcman
H
5
Antworten
22
Aufrufe
1.366
590239
5
A
Antworten
10
Aufrufe
1.865
swa00
swa00
Zurück
Oben Unten