Selbstprogrammierter App fehlt eine Klasse
lima-city → Forum → Programmiersprachen → Java
ansprechen
auto
blocken
button
code
dank
fehler
fehlermeldung
file
http
import
klasse code
methode
not
page
pfad
schema
string
treten
url
-
Hallo,
ich möchte gerne schon mal üben, wie ich Apps für Android programmiere. Eclipse für Java-Entwickler, die Android-SDKs, 2 SDK-Images und das ADT habe ich bereits. Ich habe auch schon einen Button mit einem Event versehen und kann ein Textfeld ansprechen. Nun bin ich aber auf ein Problem gestoßen: Ich benötige eine weitere Klasse, die ich auch schon geschrieben habe. Allerdings wird sie beim Ausführen nicht auf das emulierte Android-System übertragen.
Beim normalen Ausführen äußert sich das darin, dass meine App abstürzt, sobald die Methode aufgerufen wird, die die andere Klasse benötigt, und "Unfortunately, Test1 hast stopped." auf dem emulierten Smartphone angezeigt wird. Führe ich die App im Debugging-Modus aus, dann stürzt die App nicht ab und auch die Fehlermeldung erscheint nicht, aber das ganze funktioniert natürlich trotzdem nicht und mir wird in Eclipse ein neuer Tab namens "StrictMode.class" geöffnet. Der Titel dessen ist "Class File Editor". Dann steht dort "Source not found" und "The JAR file [Pfad zu meiner Entwicklungsumgebung]/android-sdks/android.jar has no source attachmant. You can attach the source by clicking Attach Source below:". Anschließend folgt natürlich ein ein "Attach Source..."-Button, jedoch weiß ich nicht, was ich im dann erscheinenden Dialog auswählen soll.
Nach einer horizontalen Linie steht noch das: http://pastebin.com/7uLWDqrm
Mein Projekt heißt – wie die Fehlermeldung oben schon verrät – "Test1". Das Package ist mic.example.test1 und beide Java-Dateien (die standardmäßig angelegte Klasse und meine selbstgeschriebene) liegen in Test1/src/mic.example.test1 . -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Beim Android-Apps programmieren treten öfters mal solche "unfotunatelly the applic....." Fehler auf, welche nur durch Source not found definiert werden. Ich suche nach dem Grund für solche Fehler immer nach meinem eigenen Schema, auch wenn das vl. nicht der beste Weg zur Lösung ist:
1) alles auskommentieren was nicht benötigt wird
2) nacheinander wieder einkommentieren bis der Fehler wieder auftritt
3) Diesen Fehler beheben oder im Forum fragen -
Wenn irgendwas auf Android abstürzt gibt es normalerweise eine Meldung mit Details zum Fehler im logcat… hast du dort schon nachgeschaut?
-
@Friedsei: Danke! Es lag wirklich nicht daran, dass ich eine andere Klasse einbinde. Die App läuft, wenn ich die richtigen Stellen auskommentiere. Wo der Fehler steckt, ist damit festgestellt.
Hier ist eine Methode meiner zusätzlichen Klasse:
Natürlich ist das nicht die ganze Methode und sie gibt auch nicht einfach "hallo" zurück. Alles, das ich auskommentiert habe, steht in diesem Code gar nicht mit drin und weil ich in dem noch vorhandenen Teil der Methode keinen Rückgabewert erzeuge, musste ich halt irgendeinen nehmen, da ich die Methode wegen der weiteren Verwendung einen String zurückgeben lassen muss.public String reload() { try { URL url = new URL(this.page); URLConnection urlConnection = url.openConnection(); InputStream urlConnectionIS = urlConnection.getInputStream(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "hallo"; }
Ob die App abstürzt, oder nicht, hängt davon ab, ob ich die dritte Zeile im try-Block auskommentiere, oder sie so stehen lasse, wie sie im Code oben steht.
Das sind die Imports der Klasse:import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection;
Aus dem LogCat konnte ich nicht wirklich etwas herauslesen.
LogCat mit SessionFilter: http://pastebin.com/Pjn6A8ru
LogCat ohne Filter: http://pastebin.com/U3KwgLN0
Ich finde zwar "FATAL EXCEPTION: main", aber aus dem Nachfolgenden werde ich nicht wirklich schlau.
Beitrag zuletzt geändert: 29.10.2012 20:01:28 von drafed-map -
Probier vl. mal im catch-Block alle Exceptions einzubinden und sieh dir dann an welche Exception da geworfen wird.
public String reload() { try { URL url = new URL(this.page); URLConnection urlConnection = url.openConnection(); InputStream urlConnectionIS = urlConnection.getInputStream(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return "hallo"; }
Beitrag zuletzt geändert: 29.10.2012 22:02:23 von friedsei -
Guter Plan. Es wird eine android.os.NetworkOnMainThreadException geworfen. Wie es aussieht, darf man unter Android keine Netzwerkabfrage im Hauptthread erstellen, sondern muss sie asynchron laufen lassen. Die Sache scheint damit erledigt zu sein, aber da ich meine Struktur nun neu überdenken und dann realisieren muss, kann es etwas dauern, bis ich hier reinschreibe, ob es geht, oder nicht.
Edit: Ich habe mich jetzt mit 4 oder 5 komplett unterschiedlichen Ansätzen stundenlang herumgequält. Alles, was ich vergessen habe, ist die Zeile
in der AndroidManifest.xml.<uses-permission android:name="android.permission.INTERNET"/>
Hoffentlich geht ab jetzt alles klar ... nachdem ich für eine einfache Netzwerkabfrage viele Stunden verschwendet habe ...
Danke auf jeden Fall an euch. Sonst hätte es wohl noch länger gedauert, bis ich darauf gekommen wäre.
Beitrag zuletzt geändert: 30.10.2012 11:05:42 von drafed-map -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage