1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. Micka, 16.01.2012 #1
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Hy,

    ich mal wieder. Einige kennen mich evtl aus den vorherigen Threads zu Problemen mit meiner App.

    Das neuste Problem tritt nun beim ändern eines Eintrags auf.
    Um Eine Änderung zu realisieren hole ich mir aus der Datenbank die betreffenden Daten.

    Nun möchte ich in meiner Eingabemaske die bisherigen Daten in die views laden.

    Meine Eingabe Maske sieht wie folgt aus:

    Spinner Spinner Spinner
    TextView: EditText
    TextView: EditText

    oder eben in XML:
    Code:
    <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>
    
    An der Stelle in meinem Code an der ich die Daten gerne in die Maske setzen möchte wird mir eine NullPointerException geschmissen.

    Hier die Klasse:
    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.eintraghinzufuegenlayout);
            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, "Vor Edit Eintrag: " + eintrag.day + "." +eintrag.month +"." + eintrag.year +", " + eintrag.wofuer + ", " + eintrag.betrag + ", id=" + eintrag._id);
                Spinner day = (Spinner)findViewById(R.id.aendern_datum_Tag);
                 [B]day.setSelection(eintrag.day); [U]//Zeile 48(Siehe LogCat)[/U][/B]
                 Spinner month = (Spinner)findViewById(R.id.aendern_datum_Monat);
                 month.setSelection(eintrag.month);
                 Spinner year = (Spinner)findViewById(R.id.aendern_datum_Jahr);
                 month.setSelection(eintrag.year);
                 EditText wofuer = (EditText)findViewById(R.id.aendern_zweck);
                 wofuer.setText(eintrag.wofuer);
                 EditText betrag = (EditText)findViewById(R.id.aendern_betrag);
                 wofuer.setText(String.valueOf(eintrag.betrag));
             }
        }
        public void onClickEintragSpeichern(final View sfNormal) 
        {
            ...
        }
    }
    
    und hier mein LogCat OutPut:
    Code:
    01-16 15:08:45.962: E/AndroidRuntime(389): FATAL EXCEPTION: main
    01-16 15:08:45.962: E/AndroidRuntime(389): java.lang.RuntimeException: Unable to start activity ComponentInfo{micka.haushaltsbuch/micka.haushaltsbuch.EintragAendernActivity}: java.lang.NullPointerException
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.os.Handler.dispatchMessage(Handler.java:99)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.os.Looper.loop(Looper.java:123)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at java.lang.reflect.Method.invokeNative(Native Method)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at java.lang.reflect.Method.invoke(Method.java:521)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at dalvik.system.NativeStart.main(Native Method)
    01-16 15:08:45.962: E/AndroidRuntime(389): Caused by: java.lang.NullPointerException
    [B]01-16 15:08:45.962: E/AndroidRuntime(389):     at micka.haushaltsbuch.EintragAendernActivity.onCreate(EintragAendernActivity.java:48)[/B]
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    01-16 15:08:45.962: E/AndroidRuntime(389):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    01-16 15:08:45.962: E/AndroidRuntime(389):     ... 11 more
    
    scheinbar kennt der Spinner das ihm im Layout zugeordnete Array noch nicht.

    Was mach ich hier falsch?
     
  2. Micka, 17.01.2012 #2
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Mir ist gerade aufgefallen das ich im onCreate ein falsches Layout angegeben habe. Dies habe ich dann eben korrigiert so dass setContentview auch wirklich das Layout bekommt, dass ich euch schon gepostet habe.

    Seit dieser kleinen Änderung sieht der LogCatOutPut wie folgt aus.
    Viel weiter als vorher komme ich damit aber leider auch nicht. Sieht jemand wo das Problem liegt?
     
  3. the_alien, 17.01.2012 #3
    the_alien

    the_alien Android-Lexikon

    Es wird auf einen Index des Arrays zugegriffen der nicht existiert. Also würde ich mal die Arrays die du in der XML angibst checken.
     
    Micka bedankt sich.
  4. Micka, 17.01.2012 #4
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Das im Layout verwendete Array ist das gleiche wie das fürs erstellen. Es existieren 31 Items. Sollte passen. Poste gleich mal die Arrays.xml wenn ich am Rechner bin.
     
  5. Micka, 17.01.2012 #5
    Micka

    Micka Threadstarter Erfahrener Benutzer

    hier mal die Arrays.xml: Ich hänge mal das komplette Project an, vielleicht liegt der Fehler ja ganz woanders.

    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>
    
     

    Anhänge:

  6. maniac103, 18.01.2012 #6
    maniac103

    maniac103 Android-Lexikon

    Kann mir jetzt nicht den Code genau anschauen, aber was spricht eigentlich gegen die Verwendung eines DatePickers?

    Sent from my Defy
     
  7. Micka, 18.01.2012 #7
    Micka

    Micka Threadstarter Erfahrener Benutzer

    Eigentlich nichts, aber so müsste es ja auch gehen. Hab das Programm schonmal in Java geschrieben und da hab ichs halt so gemacht.
     

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android string[] NullPointerException