Java Klasse unter Android ?

  • Hi Community


    Ich bin neu hier und hätte gleich mal eine Frage.


    Kann ich beliebigen JAVA code in einem Android Projekt aufrufen ? wenn ja was ist zu beachten ?


    Hintergrund der Frage ist das ich eine JAVA Klasse habe die nichts weiter tut als eine Datei auszulesen und dort bestimmte TAGS sucht und ausschneidet. Diese gibt dann ein String Array zurück. Die Klasse funktioniert wunderbar unter JAVA, aber wenn ich sie in mein Android Projekt einfüge, ein Object erzeuge und dann die Methode aufrufe, fliegt mir alles um die Ohren.


    Gruß
    Michael

  • Hi Thunderdome,


    Zitat

    Kann ich beliebigen JAVA code in einem Android Projekt aufrufen ?


    zu 98% ja


    Zitat

    wenn ja was ist zu beachten ?


    Entweder sagt dir Eclipse das es nicht geht oder in der LogCat steht es dann zur Laufzeit.


    Aber vielleicht könntest du ja deinen Code posten bzw die Fehlermeldung dann könnte man dir vielleicht noch besser weiter helfen.


    Mfg TItus

  • Wow schnelle Antwort ;)


    Also hier wäre mein LogCat gefiltert nach ERROR,



    07-16 12:52:21.231: E/AndroidRuntime(374): FATAL EXCEPTION: main
    07-16 12:52:21.231: E/AndroidRuntime(374): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.mw.simracetv/de.mw.simracetv.ProgramActivity}: java.lang.NullPointerException
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.os.Handler.dispatchMessage(Handler.java:99)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.os.Looper.loop(Looper.java:123)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread.main(ActivityThread.java:3683)
    07-16 12:52:21.231: E/AndroidRuntime(374): at java.lang.reflect.Method.invokeNative(Native Method)
    07-16 12:52:21.231: E/AndroidRuntime(374): at java.lang.reflect.Method.invoke(Method.java:507)
    07-16 12:52:21.231: E/AndroidRuntime(374): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    07-16 12:52:21.231: E/AndroidRuntime(374): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    07-16 12:52:21.231: E/AndroidRuntime(374): at dalvik.system.NativeStart.main(Native Method)
    07-16 12:52:21.231: E/AndroidRuntime(374): Caused by: java.lang.NullPointerException
    07-16 12:52:21.231: E/AndroidRuntime(374): at java.io.Reader.<init>(Reader.java:65)
    07-16 12:52:21.231: E/AndroidRuntime(374): at java.io.BufferedReader.<init>(BufferedReader.java:90)
    07-16 12:52:21.231: E/AndroidRuntime(374): at java.io.BufferedReader.<init>(BufferedReader.java:78)
    07-16 12:52:21.231: E/AndroidRuntime(374): at de.mw.simracetv.WebsiteReader.readWebsiteContent(WebsiteReader.java:73)
    07-16 12:52:21.231: E/AndroidRuntime(374): at de.mw.simracetv.WebsiteReader.getProgram(WebsiteReader.java:42)
    07-16 12:52:21.231: E/AndroidRuntime(374): at de.mw.simracetv.ProgramActivity.onCreate(ProgramActivity.java:54)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    07-16 12:52:21.231: E/AndroidRuntime(374): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    07-16 12:52:21.231: E/AndroidRuntime(374): ... 11 more


    Wie gesagt das Programm läuft in Eclipse in einem Java Project ohne Probleme. Gibt es eine Spezialität ? z.B. man darf keine main Methode haben oder ähnliches ?


    Danke und gruß
    Michael

  • Da hast du wahrscheinlich eine Variable für deine Methode WebsiteReader.readWebsiteContent nicht richtig initialisiert. Kurz danach fliegt dir nämlich 'ne NullPointerExeption um die Ohren.


    Am besten setzt du vor der Zeile 73 ein paar kleine Zeilen in der folgenden Form rein, dann weißt du wenigstens, wer gerade null ist:

    Java
    if (variable == null) {
        Log.e("WebsiteReader", "variable ist leider null...");
    }


    Anschließend musst du mal gucken, wo du die Initialisierung vergessen hast...

  • Hi,


    vielleicht liegt es auch einfach nur an der Reihenfolge, die bei einem Java-Projekt etwas anders ist als bei einem Android Projekt. In einem Java-Projekt wird die Main der Klasse aufgerufen, die du in den Run Configurations gewählt hast (bzw. automatisch von Eclipse, wenn es nur eine main gibt). Wenn du dort drin dann Membervariablen der Klasse initialisierst fliegt keine NullPointerException.
    In einem Android-Projekt ist ja die "main" die onCreate Methode, die in der AndroidManifest.xml als Main ausgewiesen ist (besitzt einen intent-filter mit dem Eintrag <action android:name="android.intent.action.MAIN" />). Wenn du dort nun auf Variablen zugreifst, die erst in der "Java-Projekt-Main" initialisiert werden, knallts natürlich.


    Vielleicht hilfts dir ja weiter ;)


    Gruß,
    matze

  • Hi


    Sorry erstmal das ich mich solange nicht gemeldet hatte, ich musste leider auf Geschäftsreise. Heute habe ich mal ein paar Marken in den Code gesetzt.
    Mir fliegt der WebSiteReader hier um die Ohren.



    if (url != null) {
    try { //check System.out.println(webURL+"2");
    //lesen des Webseiten codes
    instreamreader = new InputStreamReader(url.openStream());
    }
    catch (IOException e1)
    { e1.printStackTrace(); }


    wie oben schon erwähnt geht das nur in Android nicht, in Java läuft es ohne Probleme.


    Gruß

  • Hi Thunderdome,


    mmhh ich würde mal vermuten das url.openStream() nicht richtig geht ist.


    Url wurde auch richtig initialisiert?
    hast Berechtigung Internet gesetzt? ( muss nur gesetzt werden wenn du auf eine externe Website zu greifst)
    Welche Android Version nutzt du?


    Mfg Titus

  • Super bin weiter gekommen, vielen Dank.


    War natürlich ein totaler Anfängerfehler, hatte den Zugriff aufs Internet vergessen. Bin ja aber auch noch Anfänger.


    Bin jetzt auf ein weiteres Problem gestoßen, was wahrscheinlich genau das selbe ist nur eine andere Berechtigung.



    07-26 15:36:05.532: W/System.err(589): java.io.FileNotFoundException: /temp.txt (Read-only file system)
    07-26 15:36:05.562: W/System.err(589): at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
    07-26 15:36:05.562: W/System.err(589): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
    07-26 15:36:05.562: W/System.err(589): at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
    07-26 15:36:05.562: W/System.err(589): at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
    07-26 15:36:05.572: W/System.err(589): at de.mw.simracetv.WebsiteReader.readWebsiteContent(WebsiteReader.java:82)
    07-26 15:36:05.572: W/System.err(589): at de.mw.simracetv.WebsiteReader.getProgram(WebsiteReader.java:34)
    07-26 15:36:05.582: W/System.err(589): at de.mw.simracetv.ProgramActivity.onCreate(ProgramActivity.java:54)
    07-26 15:36:05.582: W/System.err(589): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    07-26 15:36:05.582: W/System.err(589): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    07-26 15:36:05.582: W/System.err(589): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    07-26 15:36:05.582: W/System.err(589): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    07-26 15:36:05.602: W/System.err(589): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    07-26 15:36:05.602: W/System.err(589): at android.os.Handler.dispatchMessage(Handler.java:99)
    07-26 15:36:05.602: W/System.err(589): at android.os.Looper.loop(Looper.java:123)
    07-26 15:36:05.612: W/System.err(589): at android.app.ActivityThread.main(ActivityThread.java:3683)
    07-26 15:36:05.622: W/System.err(589): at java.lang.reflect.Method.invokeNative(Native Method)
    07-26 15:36:05.622: W/System.err(589): at java.lang.reflect.Method.invoke(Method.java:507)
    07-26 15:36:05.622: W/System.err(589): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    07-26 15:36:05.622: W/System.err(589): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    07-26 15:36:05.632: W/System.err(589): at dalvik.system.NativeStart.main(Native Method)
    07-26 15:36:05.662: D/AndroidRuntime(589): Shutting down VM
    07-26 15:36:05.662: W/dalvikvm(589): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    07-26 15:36:05.692: E/AndroidRuntime(589): FATAL EXCEPTION: main


    Ich habe jetzt schon bei den Berechtigungen gesucht nach WRITE FILE, leider konnte ich nichts finden. Heißt das anderst ?



    buffreader = new BufferedReader(instreamreader);


    File file = new File("temp.txt");


    System.out.println(webURL+"4");


    try {


    foutstream = new FileOutputStream(file);


    } catch (FileNotFoundException e1) {


    e1.printStackTrace();


    }


    *update*
    habe noch ein paar Berechtigungen gesetzt, hat aber leider nicht geholfen


    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"></uses-permission>



    Danke und Gruß
    Thunder

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!