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

FCs aber Eclipse meldet keinen Fehler

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von 2Stoned, 06.01.2010.

  1. 2Stoned, 06.01.2010 #1
    2Stoned

    2Stoned Threadstarter Erfahrener Benutzer

    Beiträge:
    158
    Erhaltene Danke:
    13
    Registriert seit:
    23.05.2009
    Phone:
    HTC Desire HD
    Nun wollte ich doch mal anfangen mich mit Java und im besonderen mit Android beschäftigen. Doch schon bei HelloWorld ähnlichen Apps aus der TUT Section von Google stosse ich auf Probleme :S

    Die Zeile
    Code:
            final ImageButton button = (ImageButton) findViewById(R.id.android_button);
    warf immer Fehler aus, wg. R.id.android_button.
    Doch als ich Eclipse gerade neu startete, meldete es mir keine Fehler mehr, doch die App läuft nicht, sie wird immer unerwartet erwartet beendet.
    Viel Kot ist es eigentlich nicht:

    Code:
    package com.example.forms;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;
    import com.example.forms.R;
    
    public class Forms extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            final ImageButton button = (ImageButton) findViewById(R.id.android_button);
            button.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    
                }
            });
            
        }
    }
    Die XML sieht so aus:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <ImageButton
        android:id="@+id/android_button"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:src="@drawable/android" /> 
    <Android_Button
        android:id="@+id/android_button"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:src="@drawable/android" /> 
    <EditText
        android:id="@+id/edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    </LinearLayout>
    
    Ansonsten habe ich nur noch einen neuen Ordner namens "drawable" unter "res" erstellt, welcher ein *.png enthält namens "android.png".

    Wo liegt der Hase in des Pudels Pfeffer?

    Eine kleine Frage noch:

    Das folgende habe ich aus nem TUT kopiert, und ohne es meldet Eclipse Fehler, aber woher kommt es?

    Code:
                }
            });
            
        }
    }
    Dieses }); verwirrt mich, da ich es nicht zuordnen kann :S

    Ach und noch was(^^)
    Sollte ich nach "// TODO Auto-generated method stub" etwas machen?
     
  2. Melbar, 06.01.2010 #2
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    Hi,

    entferne einfach aus der XML folgenden Abschnitt

    Code:
    <Android_Button
        android:id="@+id/android_button"
        android:layout_width="100dip"
        android:layout_height="wrap_content"
        android:src="@drawable/android" /> 
    
    dann sollte es laufen. Eine Komponente mit dem Namen Android_Button gibts nicht, daher der Fehler.

    Deine Frage bezüglich der Zeile }); ist eigentlich ganz einfach ich hab es mal Fett gestaltet. An der Stelle erzeugst du eine anonyme innere Klasse.
    Code:
    button.setOnClickListener(new OnClickListener() [B]{ 
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    
                }
            }[/B]);
    
    Die Klammer und das Semikolon ist der Rest der Anweisung button.setOnClickListener();

    Achja fast vergessen, nach TODO musst du nichts machen, es sei denn es soll nach dem Klick auf deinen ImageButton irgendwas passieren, dann solltest du an der stelle die entsprechende Methode aufrufen, oder irgendwas anderes machen.

    Gruß
    Stefan

    PS: fallst du noch Lektüre zum Java Einstieg suchst empfehle ich dir Java ist auch eine Insel.
     
    2Stoned bedankt sich.
  3. swordi, 07.01.2010 #3
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    warum soll es Android_Button nicht geben?

    er wird sich diese Komponente ja wohl selbst gebaut haben, sonst würde man das Projekt ja nicht (zumindest ohne entsprechende Meldung) starten können.
     
  4. Melbar, 07.01.2010 #4
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    Hi swordi,

    es scheint dem XML Parser an der Stelle völlig egal zu sein ob die Komponente existiert oder nicht, es wird lediglich auf Syntaxfehler geprüft. Erst beim ausführen auf dem Emulator kommt es zu einem Fehler und zwar einem force close, da die Komponente ja nicht existiert.

    Außerdem bin ich davon ausgegangen das 2Stoned keine eigene Komponente erzeugt hat, da er ja wie er selbst schreibt wenig Kenntnisse von Java/Android hat.

    Gruß
    Stefan
     
  5. 2Stoned, 07.01.2010 #5
    2Stoned

    2Stoned Threadstarter Erfahrener Benutzer

    Beiträge:
    158
    Erhaltene Danke:
    13
    Registriert seit:
    23.05.2009
    Phone:
    HTC Desire HD
    Vielen Dank, es war tatsächlich dieser unnötige Eintrag im main.xml
    Was habe ich gelernt? Man soll seinen Code immer schön sauber halten, und nicht gebrauchte Sachen entfernen oder, falls man denkt, dass man sie später nutzen wird halt als Kommentar stehen lassen.

    Jetzt habe ich allerdings ein ganz anderes Problem, eines das ich schon mit dem OnClickListener hatte, welches sich allerdings in Luft aufgelöst hat, ohne Änderung meinerseits.

    Code:
            final EditText edittext = (EditText) findViewById(R.id.edittext);
            edittext.setOnKeyListener(new OnKeyListener() {
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                      // Perform action on key press
                      Toast.makeText(Forms.this, edittext.getText(), Toast.LENGTH_SHORT).show();
                      return true;
                    }
                    return false;
                }
    
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode,
                        KeyEvent event) {
                    // TODO Auto-generated method stub
                    return false;
                }
            });
    Die Zeile "edittext.setOnKeyListener(new OnKeyListener() {" macht Probleme, Eclipse schlägt mir mit QuickFix vor, das "setOnKeyListener" zu ändern. Ändere ich es in etwas das vorgeschlagen wurde, gilt auch dies als falsch, setOnKeyListener steht dann allerdings wieder als Vorschlag von Eclipse selbst zur Verfügung.
    Was läuft hier falsch?
     
  6. Melbar, 07.01.2010 #6
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    Hallo,

    dein Codeausschnitt ist eigentlich fast richtig, du hast zwar die Methode onKey 2 mal drin aber das wird dir Eclipse noch sagen wenn der andere Fehler beseitigt ist.

    Ich schätze einfach mal das die Interfaceklasse OnKeyListener nicht in deinen Imports (am anfange der Datei) aufgeführt ist, das kannst du natürlich nachtragen oder einfach Shift+Strg+O drücken dann werden die Imports aktualisiert. Sollte es mehrere Klassen mit dem Namen geben erscheint ein Auswahlfenster in dem Fall ist es android.view.View.OnKeyListener.

    Gruß
    Stefan
     
  7. 2Stoned, 07.01.2010 #7
    2Stoned

    2Stoned Threadstarter Erfahrener Benutzer

    Beiträge:
    158
    Erhaltene Danke:
    13
    Registriert seit:
    23.05.2009
    Phone:
    HTC Desire HD
    Daran habe ich auch schon gedacht, und auch schon gemacht, allerdings meldet mir Eclipse, dass dies ein überflüssiger Import sei. Eclipse meint import android.view.KeyEvent; gehört zum OnKeyListener, dieses hat es nämlich hinzugefügt, als ich den OnKeyListener erwähnte...
    Zudem ist auch ein android.content.DialogInterface.OnKeyListener importiert.
     
  8. Melbar, 07.01.2010 #8
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    android.content.DialogInterface.OnKeyListener solltest du entfernen, wenn dieser genutzt wird kann der Fehler dadurch hervorgerufen werden.
     
    2Stoned bedankt sich.
  9. 2Stoned, 07.01.2010 #9
    2Stoned

    2Stoned Threadstarter Erfahrener Benutzer

    Beiträge:
    158
    Erhaltene Danke:
    13
    Registriert seit:
    23.05.2009
    Phone:
    HTC Desire HD
    Sehr verdächtig. Jetzt funktioniert es jedenfalls :D
    Allerdings kamen dadurch 2-3 andere Fehler die ich aber selbst korrigieren konnte. Die meisten Stolpersteine wurden hier von Eclipse selbst gelegt :S
    Ich werde mich wohl noch etwas damit vertraut machen müssen und noch sicherer im Umgang mit Java werden, ich hoffe es kommt mit der Zeit und Try&Error :p

    Vielen Dank jedenfalls :D

    Vielleicht noch ne kleine Frage am Rande, die evtl. auch nen ganzen Thread wert währe:

    Wie mache ich denn die APK am besten?
    Bei Eclipse auf export ist klar soweit, aber wie sieht es mit zipalign und so weiter (Optimierungen) aus?
     
    Zuletzt bearbeitet: 07.01.2010
  10. Melbar, 07.01.2010 #10
    Melbar

    Melbar Android-Hilfe.de Mitglied

    Beiträge:
    84
    Erhaltene Danke:
    23
    Registriert seit:
    16.05.2009
    Phone:
    Samsung Galaxy S3
    Let me google that for you

    Aber kurz gesagt, wenn du mit Eclipse ne signed APK erzeugst wird es automatisch ausgeführt.
     

Diese Seite empfehlen