Textdatei einlesen und Werte in den Spinner einfügen

  • 19 Antworten
  • Neuester Beitrag
Diskutiere Textdatei einlesen und Werte in den Spinner einfügen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
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.
 
T

Tom299

Stammgast
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.
 
Z

zblack

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
 
S

swordi

Lexikon
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
 
T

Tom299

Stammgast
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++;
    }
 
Z

zblack

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.
 
S

swordi

Lexikon
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
 
Z

zblack

Gast
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
 
T

Tom299

Stammgast
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.
 
DieGoldeneMitte

DieGoldeneMitte

Experte
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.
 
Z

zblack

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 bearbeitet von einem Moderator:
S

swordi

Lexikon
dann leg die datei mal in den assets ordner und benutze den assetmanager

dann wirds besser klappen
 
Z

zblack

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.
 
S

swordi

Lexikon
na immerhin wird schonmal was angezeigt :D

jetzt musst halt dem nullpointer nachgehen. wird sicher auch zu finden sein
 
T

Tom299

Stammgast
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:
 
Z

zblack

Gast
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:
Z

zblack

Gast
Tom299 schrieb:
das sind bei mir keine 40 Einträge, oder? :cool2:
hast recht. grund für den Fehler ist falsche felddemension.
 
T

Tom299

Stammgast
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.
 
Z

zblack

Gast
cool. vielen dank für die Hilfe
 
Ähnliche Themen - Textdatei einlesen und Werte in den Spinner einfügen Antworten Datum
1
3
4