Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

ArrayOutOfBoundException

Das Thema "ArrayOutOfBoundException" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 19.01.2012, 15:59   #1 (permalink)
Junior Mitglied
 
Benutzerbild von Micka

Registriert seit: 30.12.2011
Beiträge: 43
Abgegebene Danke: 17
Erhielt 0 Danke für 0 Beiträge
Standard ArrayOutOfBoundException

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);
            Spinner day = (Spinner)findViewById(R.id.aendern_datum_Tag);
             day.setSelection(eintrag.day);
             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);
             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 RessourcenArrays.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>
Micka ist offline   Mit Zitat antworten
Alt 19.01.2012, 16:22   #2 (permalink)
Android Guru

Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus

Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
Standard AW: ArrayOutOfBoundException

Ich weiß, es hilft dir bei der ArrayIndexOutOfBoundsException nicht weiter, aber es gibt einen DatePicker...


PS: Spinner hat kein entryValues...
__________________
Follow/Add/Circle/Whatever me on Google+

Solitaire HD, ein Solitaire optimiert für Honeycomb.

Geändert von the_alien (19.01.2012 um 16:27 Uhr)
the_alien ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag:
Micka (19.01.2012)
Alt 19.01.2012, 16:58   #3 (permalink)
Junior Mitglied
 
Benutzerbild von Micka

Registriert seit: 30.12.2011
Beiträge: 43
Abgegebene Danke: 17
Erhielt 0 Danke für 0 Beiträge
Standard AW: ArrayOutOfBoundException

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.
Micka ist offline   Mit Zitat antworten
Alt 19.01.2012, 17:09   #4 (permalink)
Android Guru

Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus

Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
Standard AW: ArrayOutOfBoundException

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.
__________________
Follow/Add/Circle/Whatever me on Google+

Solitaire HD, ein Solitaire optimiert für Honeycomb.
the_alien ist offline   Mit Zitat antworten
Alt 19.01.2012, 17:55   #5 (permalink)
Junior Mitglied
 
Benutzerbild von Micka

Registriert seit: 30.12.2011
Beiträge: 43
Abgegebene Danke: 17
Erhielt 0 Danke für 0 Beiträge
Standard AW: ArrayOutOfBoundException

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?
Micka ist offline   Mit Zitat antworten
Alt 19.01.2012, 19:40   #6 (permalink)
Junior Mitglied
 
Benutzerbild von Micka

Registriert seit: 30.12.2011
Beiträge: 43
Abgegebene Danke: 17
Erhielt 0 Danke für 0 Beiträge
Standard AW: ArrayOutOfBoundException

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);
Micka ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht





Du liest gerade: "ArrayOutOfBoundException" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.