ArrayOutOfBoundException

Micka

Micka

Fortgeschrittenes Mitglied
1
Hallo,

mein Ziel ist es Daten aus einer Datenbank in einer Eingabemaske auszugeben damit die Daten dann geändert werden können.

Speziell problematisch scheinen mir die Spinner meiner Eingabemaske.
Was mich stark wundert ist das ich die gleichen Arrays auch in meiner EintragHinzufuegenActivity benutze und dort klappt alles.
Der Wert der übergeben wird ist übrigens in all meinen Testfällen 2...Das Array hat wie ihr unten sehen könnt aber mehr als 2 Items...

Den anscheinend fehlerhaften Code in der Activity habe ich mal Hervorgehoben, kommentiere ich diesen Teil aus läuft alles.
Was mache ich falsch?


Im LogCat steht folgendes:
Code:
01-19 14:46:54.011: E/AndroidRuntime(274): FATAL EXCEPTION: main
01-19 14:46:54.011: E/AndroidRuntime(274): java.lang.IndexOutOfBoundsException
01-19 14:46:54.011: E/AndroidRuntime(274):     at java.util.Arrays$ArrayList.get(Arrays.java:77)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:298)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:351)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.Spinner.makeAndAddView(Spinner.java:189)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.Spinner.layout(Spinner.java:148)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.Spinner.onLayout(Spinner.java:112)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1238)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.TableRow.onLayout(TableRow.java:121)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.TableLayout.onLayout(TableLayout.java:437)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.View.layout(View.java:7035)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1045)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.os.Looper.loop(Looper.java:123)
01-19 14:46:54.011: E/AndroidRuntime(274):     at android.app.ActivityThread.main(ActivityThread.java:4627)
01-19 14:46:54.011: E/AndroidRuntime(274):     at java.lang.reflect.Method.invokeNative(Native Method)
01-19 14:46:54.011: E/AndroidRuntime(274):     at java.lang.reflect.Method.invoke(Method.java:521)
01-19 14:46:54.011: E/AndroidRuntime(274):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-19 14:46:54.011: E/AndroidRuntime(274):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-19 14:46:54.011: E/AndroidRuntime(274):     at dalvik.system.NativeStart.main(Native Method)
Meine Activity(EintragAendernActivity.java):
Code:
package micka.haushaltsbuch;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;

public class EintragAendernActivity extends Activity
{
    
    final static String MY_DB_NAME = "FinanzenDB";
    static String MY_DB_TABLE = "eintraege";
    final static String tag="ensacom"; 
    long id;
    SQLiteDatabase myDB = null;
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.eintragaendernlayout);
        altenEintragLaden();
    }
    public void altenEintragLaden()
    {
        myDB = null;
        final Bundle extras = getIntent().getExtras();
        if(extras != null)
        {
            MY_DB_TABLE = extras.getString(EintraegeAnzeigenActivity.TABELLENNAME);
            id = extras.getLong(EintraegeAnzeigenActivity.ID);
        }
        Eintrag eintrag = null;
        myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
        Cursor eintragCursor = myDB.rawQuery("SELECT _id, day, month, year, wofuer, betrag FROM " + MY_DB_TABLE + " WHERE _id=" + id + " Order By day, month, year", null);
               
           eintragCursor.moveToFirst();
           if(eintragCursor.moveToFirst())
        {
            eintrag = null;
            eintrag = new Eintrag(eintragCursor.getInt(0),eintragCursor.getInt(1),eintragCursor.getInt(2),eintragCursor.getInt(3),eintragCursor.getString(4),eintragCursor.getDouble(5));
        }
        eintragCursor.close();
        myDB.close();
        if(eintrag != null)
        {
            Log.v(tag, "Edit Eintrag: " + eintrag.day + "." +eintrag.month +"." + eintrag.year +", " + eintrag.wofuer + ", " + eintrag.betrag + ", id=" + eintrag._id);
            [B]Spinner day = (Spinner)findViewById(R.id.aendern_datum_Tag);
             day.setSelection(eintrag.day);[/B]
             [B]Spinner month = (Spinner)findViewById(R.id.aendern_datum_Monat);
             month.setSelection(eintrag.month);
             Spinner year = (Spinner)findViewById(R.id.aendern_datum_Jahr);
             year.setSelection(eintrag.year);[/B]
             EditText wofuer = (EditText)findViewById(R.id.aendern_zweck);
             wofuer.setText(eintrag.wofuer);
             EditText betrag = (EditText)findViewById(R.id.aendern_betrag);
             betrag.setText(String.valueOf(eintrag.betrag));
        }
    }
    public void onClickEintragSpeichern(final View sfNormal) 
    {
        Spinner day = (Spinner) findViewById(R.id.datum_Tag);
        Spinner month = (Spinner) findViewById(R.id.datum_Monat);
        Spinner year = (Spinner) findViewById(R.id.datum_Jahr);
        EditText wofuer = (EditText) findViewById(R.id.hinzufuegen_zweck);
        EditText betrag = (EditText) findViewById(R.id.hinzufuegen_betrag);
        //Extras abrufen
        final Bundle extras = this.getIntent().getExtras();
        if(extras != null)
        {
            MY_DB_TABLE = extras.getString(StartHaushaltsbuchActivity.TABELLENNAME);
            if(MY_DB_TABLE == null)
            {
                MY_DB_TABLE = extras.getString(EintraegeAnzeigenActivity.TABELLENNAME);
            }
        }
        final Eintrag eintrag = new Eintrag();
        eintrag.day = Integer.valueOf(day.getSelectedItem().toString()) ;
        eintrag.month = Integer.valueOf(month.getSelectedItem().toString()) ;
        eintrag.year = Integer.valueOf(year.getSelectedItem().toString()) ;
        eintrag.wofuer = wofuer.getText().toString();
        eintrag.betrag = Double.parseDouble(betrag.getText().toString());
        myDB = null;
        myDB = this.openOrCreateDatabase(MY_DB_NAME, MODE_PRIVATE, null);
        myDB.execSQL("CREATE TABLE IF NOT EXISTS " + MY_DB_TABLE
                + " (_id integer primary key autoincrement,"
                + " day integer(2), month integer(2),"
                + " year integer(4), wofuer text not null,"
                + " betrag real)"
                +";");
        myDB.execSQL("INSERT INTO "+MY_DB_TABLE+" (day, month, year, wofuer, betrag) "
                +"VALUES (" + eintrag.day +","+eintrag.month+","
                + eintrag.year +","+"'"+eintrag.wofuer +"',"
                + eintrag.betrag+ ");");
        Log.v(tag, "Insert new Eintrag: " + eintrag.day + "." +eintrag.month +"." + eintrag.year +", " + eintrag.wofuer + ", " + eintrag.betrag + ", id=" + eintrag._id);
        myDB.close();
        final Intent i = new Intent(this, StartHaushaltsbuchActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        startActivity(i);
    }
}
Mein Layout(eintragaendernlayout.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" 
>
    <!--     Datum -->
    <TableRow>
        <Spinner
            android:id="@+id/aendern_datum_Tag"
            android:layout_width="fill_parent"
               android:layout_height="wrap_content"
            android:drawSelectorOnTop="true" 
            android:entries="@array/tag_anzeige"
            android:entryValues="@array/tag_wert"
        />
        <Spinner
            android:id="@+id/aendern_datum_Monat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:drawSelectorOnTop="true" 
            android:entries="@array/monat_anzeige"
            android:entryValues="@array/monat_wert"
        />
        <Spinner
            android:id="@+id/aendern_datum_Jahr"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:drawSelectorOnTop="true" 
            android:entries="@array/jahr_anzeige"
            android:entryValues="@array/jahr_wert"
        />
    </TableRow>
    <!-- Zweck -->
    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Zweck:" 
            android:gravity="left" 
            android:maxWidth="15dp"/>

        <EditText
            android:id="@+id/aendern_zweck"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="text" >

            <requestFocus />
        </EditText>

    </TableRow>
    <!-- Betrag -->
    <TableRow>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Betrag:" 
        />
        <EditText
            android:id="@+id/aendern_betrag"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:inputType="number|numberSigned|numberDecimal"
        />
    </TableRow>
    <Button
        android:id="@+id/button_aendern"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/buttontxt_aendern"
        android:onClick="onClickEintragSpeichern" 
    />

</TableLayout>
Meine Ressourcen:(Arrays.xml):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <array name="tag_anzeige">
        <item>"01"</item>
          <item>"02"</item>
          <item>"03"</item>
          <item>"04"</item>
          <item>"05"</item>
          <item>"06"</item>
          <item>"07"</item>
          <item>"08"</item>
          <item>"09"</item>
          <item>"10"</item>
          <item>"11"</item>
          <item>"12"</item>
          <item>"13"</item>
          <item>"14"</item>
          <item>"15"</item>
          <item>"16"</item>
          <item>"17"</item>
          <item>"18"</item>
          <item>"19"</item>
          <item>"20"</item>
          <item>"21"</item>
          <item>"22"</item>
          <item>"23"</item>
          <item>"24"</item>
          <item>"25"</item>
          <item>"26"</item>
          <item>"27"</item>
          <item>"28"</item>
          <item>"29"</item>
          <item>"30"</item>
          <item>"31"</item>
      </array>
      <array name="tag_wert">
        <item>01</item>
          <item>02</item>
          <item>03</item>
          <item>04</item>
          <item>05</item>
          <item>06</item>
          <item>07</item>
          <item>08</item>
          <item>09</item>
          <item>10</item>
          <item>11</item>
          <item>12</item>
          <item>13</item>
          <item>14</item>
          <item>15</item>
          <item>16</item>
          <item>17</item>
          <item>18</item>
          <item>19</item>
          <item>20</item>
          <item>21</item>
          <item>22</item>
          <item>23</item>
          <item>24</item>
          <item>25</item>
          <item>26</item>
          <item>27</item>
          <item>28</item>
          <item>29</item>
          <item>30</item>
          <item>31</item>
      </array>
      <array name="monat_anzeige">
          <item>"01"</item>
          <item>"02"</item>
          <item>"03"</item>
          <item>"04"</item>
          <item>"05"</item>
          <item>"06"</item>
          <item>"07"</item>
          <item>"08"</item>
          <item>"09"</item>
          <item>"10"</item>
          <item>"11"</item>
          <item>"12"</item>
    </array>
    <array name="monat_wert">
          <item>01</item>
          <item>02</item>
          <item>03</item>
          <item>04</item>
          <item>05</item>
          <item>06</item>
          <item>07</item>
          <item>08</item>
          <item>09</item>
          <item>10</item>
          <item>11</item>
          <item>12</item>
    </array>
    <array name="jahr_anzeige">
        <item>"2011"</item>
        <item>"2012"</item>
        <item>"2013"</item>
        <item>"2014"</item>
        <item>"2015"</item>
        <item>"2016"</item>
        <item>"2017"</item>
        <item>"2018"</item>
        <item>"2019"</item>
        <item>"2020"</item>
        <item>"2021"</item>
        <item>"2022"</item>
        <item>"2023"</item>
        <item>"2024"</item>
        <item>"2025"</item>
        <item>"2026"</item>
        <item>"2027"</item>
        <item>"2028"</item>
        <item>"2029"</item>
        <item>"2030"</item>
    </array>
    <array name="jahr_wert">
        <item>2011</item>
        <item>2012</item>
        <item>2013</item>
        <item>2014</item>
        <item>2015</item>
        <item>2016</item>
        <item>2017</item>
        <item>2018</item>
        <item>2019</item>
        <item>2020</item>
        <item>2021</item>
        <item>2022</item>
        <item>2023</item>
        <item>2024</item>
        <item>2025</item>
        <item>2026</item>
        <item>2027</item>
        <item>2028</item>
        <item>2029</item>
        <item>2030</item>
    </array>
</resources>
 
Ich weiß, es hilft dir bei der ArrayIndexOutOfBoundsException nicht weiter, aber es gibt einen DatePicker...


PS: Spinner hat kein entryValues...
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Micka
Da hast du Recht, aber ich würde es gerne auf diese Art und Weise gelöst bekommen. Es muss ja prinzipell auch so gehen.
 
Also ich würde ja mal nach Beispielen suchen. In jedem Beispiel wird ein <string-array> genutzt anstelle eines <array>.
Wenn das nicht funktioniert erstelle programmatisch einen ArrayAdapter mit deinem <string-array> und hänge den an.
 
das ist eine Idee danke. Werd es morgen mal mit einem StringArray versuchen. Hast du grad ein Link zu einem Beispiel parat? Wonach hast du gesucht?
 
Problem gelöst. Nach dem einfügen habe ich mir bisher die Auswahl als String in die Datenbank gespeichert. Nun habe ich meine Datenbank erweitert und mir noch die ausgewählte ItemPosition gespeichert.
Code:
int dayposition = day.getItemPosition();
mit der ItemPosition ist das setzen kein Problem mehr.
Code:
day.setSelection(dayposition);
 
Zurück
Oben Unten