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

Error beim starten der Activity

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Patwerk, 12.10.2010.

  1. Patwerk, 12.10.2010 #1
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Hallo zusammen,

    ich bekomme leider immer Fehler, wenn ich über
    Code:
    Intent i = new Intent(startup.this, List.class);
                startup.this.startActivity(i);
    zu starten

    versuche eine Activity aufzurufen.

    In meiner Anfangsactivity "startup.java" versuche ich über diesen Code meine Activity "List.java" aufzurufen:

    List.java
    Code:
    public class List extends ListActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
    
            setContentView(android.R.layout.simple_list_item_1);
            //ShowList();  
        }
    
    Doch beim starten der App im Emulator bekomm ich immer die Fehlermeldung "Application stopped unexpectly".

    Ich habe mal versucht rein zu debuggen und an der stelle des Erstellens des Intents bekomme ich folgende Fehlermeldung:

    [​IMG]

    Weiß einer von euch, was ich falsch mache?
    Ich habe die Activity auch im Manifest registriert.

    Danke schon mal für eure Hilfe,

    Viele Grüße,
    Patwerk
    [​IMG]
     
  2. Riffer, 12.10.2010 #2
    Riffer

    Riffer Android-Lexikon

    Beiträge:
    1,261
    Erhaltene Danke:
    220
    Registriert seit:
    06.03.2010
    Phone:
    OnePlus Two
    Tablet:
    Samsung Galaxy NotePRO 12.2
    Folgender Aufruf sollte eigentlich reichen.

    Code:
    Intent i = new Intent(getApplicationContext(), List.class);
    startActivity(i);
    
    Das verwendete Layout ist für ListItems gedacht. Da Du hier eine ListActivity verwendest, gehe ich davon aus, dass Du eigentlich eine ListView anzeigen willst. Im einfachsten Fall musst Du für eine ListActivity überhaupt kein setContentView() aufrufen, da dieses standardmäßig bereits über ein ListView verfügt. Findet ein ListView in seinem ContentView keine ListView mit der ID "@+id/android:list", so löst sie eine Exception aus und wenn diese nicht abgefangen wird, stürzt die Activity dann einfach ab, weil das onCreate() gescheitert ist.

    Ansonsten kann ich die Quellcodes der ApiDemos von Google (werden beim SDK mitgeliefert und sind über Eclipse sehr einfach einzurichten) sehr zur Lektüre und Forschung empfehlen. Zum effizienten Umgang mit ListViews weise ich hier besonders auf das Package com.example.android.apis.view - List14.java hin, da wird die Verwendung eines BaseAdapters als Quelle für ein Listview gezeigt.
     
    Patwerk bedankt sich.
  3. ko5tik, 12.10.2010 #3
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Logcat steht normalerweise eine Beschreibung und Stacktrace
     
  4. Patwerk, 12.10.2010 #4
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Okay daran lag es echt. Danke dir^^ Nun kann ich endlich weiter probieren die sql abfrgae resultate in eine Liste zu binden. Ich werd mir die google api demos mal anschauen, danke ;-)
     
  5. Patwerk, 12.10.2010 #5
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Also ich hänge leider immernoch daran, ein SQL-Query Ergebniss an ein ListView zu binden.

    Hier erstmal mein Code:

    Code:
    SQLiteDatabase db;
    db = openOrCreateDatabase("Test.db",SQLiteDatabase.CREATE_IF_NECESSARY,null);
    db.execSQL("CREATE TABLE IF NOT EXISTS awActivitiesTest" +
                        "(ID INTEGER PRIMARY KEY AUTOINCREMENT," +
                                "Name varhcar(50)," +
                                "Exp varchar(10))");
    db.execSQL("DELETE FROM awActivitiesTest", null);
    db.execSQL("INSERT INTO awActivitiesTest(Name)VALUES (\"clean\")",null);
    Cursor c = db.rawQuery("SELECT * FROM awActivitiesTest", null);
    startManagingCursor(c);
    int NameColumn = c.getColumnIndex("Name");
    int xpColumn = c.getColumnIndex("Exp");
    
    // Now create a new list adapter bound to the cursor.
    ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.two_line_list_item, c, new String[] {c.getString(NameColumn), c.getString(xpColumn)}, new int[] {android.R.id.text1, android.R.id.text2});
    
    setListAdapter(adapter);
    db.close();
    
    Naja das ganze passiert in einer Try-Catcht Blocks und es wird eine Exception geworfen:

    "java.lang.IllegalArgumentException: Empty bindArgs"

    Ich habe das binden von
    http://developer.android.com/reference/android/app/ListActivity.html
     
  6. Riffer, 13.10.2010 #6
    Riffer

    Riffer Android-Lexikon

    Beiträge:
    1,261
    Erhaltene Danke:
    220
    Registriert seit:
    06.03.2010
    Phone:
    OnePlus Two
    Tablet:
    Samsung Galaxy NotePRO 12.2
    Für den Umgang mit Datenbanken empfehle ich erst mal einen Blick in diesen sehr schönen Artikel: Creating and Using Databases in Android

    An ein ListView gebunden habe ich einen DB-Cursor allerdings auch noch nicht, Dein Quellcode sieht aber diesbezüglich etwas confus aus ;-)

    Bist Du sicher, dass die DB mit einem geöffneten und gebundenen Cursor einfach geschlossen werden darf?
     
    Zuletzt bearbeitet: 13.10.2010
  7. Patwerk, 13.10.2010 #7
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Naja die Idee mit dem Cursor habe ich von dieser Seite hier:

    ListActivity | Android Developers

    da wird ja auch ein Cursor an einen ListAdapter gebunden und dieser dann an das ListView via setListAdapter(ListAdapter) gebunden.

    Aber es muss doch irgendwie möglich sein, ein SQLite-Queryergebniss direkt an ein ListView zu binden, sodass sich die Liste dynamisch füllt.
     
  8. ko5tik, 13.10.2010 #8
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    SQL-Datenbanken liefern leider keinen Callback wenn die Daten scih geändert haben - da must du schon selbst pollen.
     
  9. Patwerk, 13.10.2010 #9
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Hmm okee was bedeutet pollen? ^^

    Die Daten ändern sich letzlich auch nicht in der Datenbank. Es ist nur ne Datenbank mit einer Anzahl von verschiedenen Tätigkeiten, welche dann in einer Liste ausgegeben werden soll und von denen der User eine Auswählen soll.

    Wie in meinem Code zu sehen, füge ich nur einen Datensatz hinzu, um eine Ausgabe zu haben, letzlich wird die Datenbank nur einmal am Anfang der App gebuildet und mit Datengefüllt und diese Daten sollen dann in der Liste angezeigt werden.
     
  10. ko5tik, 13.10.2010 #10
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Patwerk bedankt sich.
  11. Patwerk, 13.10.2010 #11
    Patwerk

    Patwerk Threadstarter Neuer Benutzer

    Beiträge:
    16
    Erhaltene Danke:
    0
    Registriert seit:
    10.10.2010
    Okay danke, der Begriff war mir noch nicht bekannt.
    Aber das löst jetzt nicht mein Problem, denn das brauche ich hier ja nicht.
     

Diese Seite empfehlen