# Auslesen der Länge einer XML-Datei in Android Studio



## Javinner (16. Mai 2018)

Hallo an alle, 

ich habe mir eine `level-list` Datei erstellt. Diese beinhaltet eine Anzahl x an `item`. Wie lese ich die Länge der Datei aus? 
Da gibt es weder .size, noch .length, die Suche im Netz brachte leider nichts. 
Geht es überhaupt? Was mache ich falsch?


----------



## Robat (16. Mai 2018)

Sind die Items in einem Array? Sowas wie:

```
<resources>
    <string-array name="foo">
       <item>String1</item>
       <item>String2</item>
       <item>String3</item>
    </string-array>
</resources>
```


----------



## truesoul (16. Mai 2018)

Hallo. 

Ein XML Parser verwenden? 
Ich hoffe ich habe dich da richtig verstanden. Du willst nicht die Länge der XML-Datei haben sondern die Anzahl an Items? 

Grüße


----------



## Javinner (16. Mai 2018)

@truesoul 
Exakt! 
Das ist die Datei:

```
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/dice_one"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/dice_two"
        android:maxLevel="1" />
    <item
        android:drawable="@drawable/dice_three"
        android:maxLevel="2" />
    <item
        android:drawable="@drawable/dice_four"
        android:maxLevel="3" />
    <item
        android:drawable="@drawable/dice_five"
        android:maxLevel="4" />
    <item
        android:drawable="@drawable/dice_six"
        android:maxLevel="5" />
</level-list>
```
Wie lese ich es aus? Ich versuche es über getResources(), jedoch ohne Erfolg.


----------



## truesoul (16. Mai 2018)

Siehe diesen Beispiel

Und eine Ressource:

Resources res = activity.getResources();
XmlResourceParser xrp = res.getXml(R.xml.your_resId);

Link oder Hier

P. S Habe jetzt erst verstanden das du eine Ressource auslesen willst.


----------



## Robat (16. Mai 2018)

Zwischenfrage: Wozu willst du denn die Anzahl der Items haben?


----------



## Javinner (16. Mai 2018)

Robat hat gesagt.:


> Zwischenfrage: Wozu willst du denn die Anzahl der Items haben?


Ich lese mich gerade hier ein und habe etwas ausprobieren wollen, und zwar gibt es eine feine Sache wie `level-list`, mit setImageLevel(int x) kannst du dann einem ImageView die Bilder zuweisen.
So wollte ich die Länge der xml-Datei auslesen und die Zufallszahl dieser als Bild an ImageView übergeben.
Aber ich bekomme es nicht hin und ich verstehe es zum Teil nicht, warum ich eine xml-Datei, die im drawable-Ordner liegt nicht auslesen kann, obwohl es eine xml-Datei ist. Wenn ich ein xml-Ordner erstellen lasse und diese dann dort speichere, dann geht es, aber ich bekomme es trotzdem nicht hin, die Anzahl an Items auszulesen. 
Wenn ich in der getRandomNumber() eine Zahl vorgebe, dann funktioniert es einwandfrei. Ich würde gerne die Datei auslesen können, um es um weitere Seiten erweitern zu können, Figuren etc.
Hier erstmal der Code:

```
public class MainActivity extends Activity implements View.OnClickListener
{


    Button btn_dice, btn_color;
    ImageView imageView;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_dice = initializeButton(R.id.btn_dice);
        btn_color = initializeButton(R.id.btn_color);
        imageView = findViewById(R.id.imageView);
        textView = findViewById(R.id.textView);

    }

    private Button initializeButton(int id)
    {
        Button button = findViewById(id);
        button.setOnClickListener(this);
        return button;
    }

    @Override
    public void onClick(View v)
    {
        switch (v.getId())
        {
            case R.id.btn_dice:
                imageView.setImageLevel(getRandomNumber());
            case R.id.btn_color:
        }
    }

    private int getRandomNumber()
    {
        /**
         * Hier komme ich nicht weiter, weil ich die sides_of_dice.xml nicht auslesen kann;
         */
        int x = 6;//mit der vorgegebenen Zahl funktioniert es einwandfrei
        return (int) (Math.random() * x);
    }
}
```


----------



## Robat (16. Mai 2018)

Also ohne "umständlich" die XML zu parsen kommst du mEn nicht an die Länge heran.
Vielleicht schaust du dir als alternative mal TypedArrays an. Dort kriegst du einfach die Länge heraus und das setzen des Bildes ist nicht aufwändiger. 

Hier findest du ein Paar Ansätze.


----------



## Javinner (16. Mai 2018)

@truesoul @Robat
Das Beispiel zum Thema `level-list` handelt sich um das Anzeigen für Akku oder WiFi etc. Eventuell ist es für den Zweck, für den ich es gerade benutzen wollte, garnicht gedacht. Werde mich weiter einlesen. Vielen Dank für Antwort und Hilfe!


----------

