2016-09-04 2 views
0

Ich versuche, eine Verarbeitung Skizze innerhalb meiner Android-Anwendung auszuführen. In dieser Skizze muss ich auf eine SVG Datei zugreifen, die sich in meinem Verzeichnis raw befindet. Ich weiß nicht, wie man auf diese Datei zugreift, selbst wenn sich die Datei in einem Verzeichnis "Daten" befand, so wie es in Processing funktioniert, würde es überhaupt nicht funktionieren. Überprüfen Sie diesen Beispielcode:Zugriff auf eine Datei in Verarbeitung mit Android Studio

import processing.core.PApplet; 
import processing.core.PShape; 
import processing.core.PVector; 

public class Menu extends PApplet { 
    /**************************************************/ 
    //icon: 
    PShape icon; 

    /**************************************************/ 
    public void settings() 
    { 
     size(displayHeight, displayHeight); 
    } 
    /**************************************************/ 
    public void setup() 
    { 
     icon = loadShape("menu.svg"); //here is where an error occurs; 
    } 
    /**************************************************/ 
    public void draw() 
    { 
     background(0); 
    } 
    /**************************************************/ 

UPDATE

Fehlermeldung:

               --------- 

beginning of crash 
09-07 07:36:07.503 2939-2986/letalis.safr.com.letalis E/AndroidRuntime: FATAL EXCEPTION: Animation Thread 
                     Process: letalis.safr.com.letalis, PID: 2939 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String processing.data.XML.getString(java.lang.String)' on a null object reference 
                      at processing.core.PShapeSVG.<init>(Unknown Source) 
                      at processing.core.PShapeSVG.<init>(Unknown Source) 
                      at processing.core.PGraphicsAndroid2D.loadShape(Unknown Source) 
                      at processing.core.PApplet.loadShape(Unknown Source) 
                      at letalis.safr.com.letalis.Esquech_Menu.setup(Esquech_Menu.java:111) 
                      at processing.core.PApplet.handleDraw(Unknown Source) 
                      at processing.core.PSurfaceNone.callDraw(Unknown Source) 
                      at processing.core.PSurfaceNone$AnimationThread.run(Unknown Source) 
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented 
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xacb7f860, error=EGL_SUCCESS 
09-07 07:36:07.592 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1150 
09-07 07:36:07.734 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented 
09-07 07:36:07.735 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab2c9da0, error=EGL_SUCCESS 
09-07 07:36:07.942 2939-2952/letalis.safr.com.letalis V/RenderScript: 0xa21fe000 Launching thread(s), CPUs 2 
09-07 07:36:08.053 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1230 
+0

Ich habe Sterne als Code-Separatoren auch. Prost :) – user6657161

+0

Danke, ist gut zu wissen :) – Zardoz

+0

@Zardoz könnten Sie die Fehlermeldung –

Antwort

0

Das Laden der Form möglicherweise nicht das Problem sein. Sie zeichnen die SVG-Form nicht auf den Bildschirm. menu.svg sollte die Wurzel Ihres Projekts sein, in dem sich Menu.pde befindet. Siehe den Screenshot unten. Ich zeige, wo die Svg-Datei befindet.

import processing.core.PApplet; 
import processing.core.PShape; 
import processing.core.PVector; 

public class Menu extends PApplet { 
    /**************************************************/ 
    //icon: 
    PShape icon; 

    /**************************************************/ 
    public void settings() 
    { 
     size(400, 400); 
    } 
    /**************************************************/ 
    public void setup() 
    { 
     icon = loadShape("Ghostscript_Tiger.svg"); 
    } 
    /**************************************************/ 
    public void draw() 
    { 
     shape(icon, 50, 50, 300, 300); // need to draw the shape you loaded 
    } 
    /**************************************************/ 
} 

+0

Immer noch nicht funktioniert ... Danke. – Zardoz

+0

@zardoz Ihr Menü.svg könnte dann beschädigt sein. Versuchen Sie, eine andere Datei herunterzuladen. Ich habe den Ghostscript-Tiger von Wikipedia entfernt. Denken Sie daran, dass Ihr Browser möglicherweise versucht, die SVG-Datei in png zu konvertieren. Ich musste wget Befehl verwenden, um die rohe Datei –

+0

herunterzuladen, dachte nie daran. Vielen Dank J.P. Die Datei wurde in der Tat beschädigt. Danke user6657161 und Yigit Bireroglu. – Zardoz

0

Sie Bilder speichern können (oder andere Daten) in sdcard, SQLite-Datenbank oder sharedpreferences. Nur diese Dateien sind in der App gepackt, die wie ein Hintergrundbild benötigt werden.

+0

Ich bin nicht sehr gut mit dieser Art von Operationen. Aber jetzt habe ich vielleicht eine Ahnung, was zu tun ist. Vielen Dank. – Zardoz

0

Wenn Sie versuchen, eine Datei ohne Verwendung eines geöffneten Verzeichnisses zu importieren, sucht die Verarbeitungsskizze sofort nach einem Ordner namens "Data" im Projektordner. Zum Beispiel, wenn Ihr Projekt wird gespeichert bei

C: // processingSketch/

Dann alle Dateien, die Sie mit Ihrem Code importieren mit Linien wie
icon = loadShape ("menu.svg");

oder

icon = loadShape (dataPath ("menu.svg"));

wird nach C: // processingSketch/Data gesucht und wenn kein solcher Datenordner existiert, wird es nicht funktionieren.

Erstellen Sie entweder den Datenordner in Ihrem Projektordner und legen Sie "menu.svg" dort ODER finden Sie das geöffnete Verzeichnis der Datei in Ihrem Android-System und fügen Sie es in den Code ein.

+0

Ich habe versucht, den Ordner "Data" zu erstellen, die Datei darin zu platzieren und sie von meinem Code aus aufzurufen und trotzdem keine positiven Ergebnisse. Ich verstehe diese zweite Option, die du mir gibst, nicht wirklich. Ich finde das offene Verzeichnis, ich stecke fest. Danke – Zardoz

+0

@Zardoz Es tut mir leid, ich könnte mich über "Data" irren. Ich denke an seine "Daten". Aber Sie können auf "Skizze" klicken und "Datei hinzufügen ..." wählen. So wird es automatisch in den richtigen Ordner gelegt. Wenn dies auch nicht funktioniert, versuchen Sie es mit "icon = loadShape (dataPath (" menu.svg ")); –

+0

Sorry, es verursacht einen Fehler. Kann ich nicht einfach den genauen Speicherort der Datei in meinem Rohverzeichnis angeben? (Ich weiß aber nicht, wie ich das machen soll.) Danke nochmal. – Zardoz

Verwandte Themen