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

NullPointerException

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

  1. Micka, 16.01.2012 #1
    Micka

    Micka Threadstarter Erfahrener Benutzer

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

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

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

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

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

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    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

    Beiträge:
    173
    Erhaltene Danke:
    1
    Registriert seit:
    30.12.2011
    Eigentlich nichts, aber so müsste es ja auch gehen. Hab das Programm schonmal in Java geschrieben und da hab ichs halt so gemacht.
     

Diese Seite empfehlen