FCs aber Eclipse meldet keinen Fehler

2

2Stoned

Fortgeschrittenes Mitglied
13
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?
 
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.
 
  • Danke
Reaktionen: 2Stoned
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.
 
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
 
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?
 
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
 
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.
 
android.content.DialogInterface.OnKeyListener solltest du entfernen, wenn dieser genutzt wird kann der Fehler dadurch hervorgerufen werden.
 
  • Danke
Reaktionen: 2Stoned
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:

Ähnliche Themen

D
Antworten
3
Aufrufe
454
jogimuc
J
M
Antworten
1
Aufrufe
1.032
wilco
W
Zurück
Oben Unten