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

ArrayOutOfBoundException

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Micka, 19.01.2012.

  1. Micka, 19.01.2012 #1
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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>
     
  2. the_alien, 19.01.2012 #2
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    Ich weiß, es hilft dir bei der ArrayIndexOutOfBoundsException nicht weiter, aber es gibt einen DatePicker...


    PS: Spinner hat kein entryValues...
     
    Zuletzt bearbeitet: 19.01.2012
    Micka bedankt sich.
  3. Micka, 19.01.2012 #3
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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.
     
  4. the_alien, 19.01.2012 #4
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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.
     
  5. Micka, 19.01.2012 #5
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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?
     
  6. Micka, 19.01.2012 #6
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    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);
     

Diese Seite empfehlen