Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.10.2018, 15:51

MonoGame Android Wie kann ich eine Textdatei in Android laden?

Ich habe meinem Android Projekt eine Textdatei hinzugefügt. In der Textdatei befindet sich Text der bei jedem Spielstart geladen werden soll. Der Text in der Datei wird nie geändert werden. Man lädt also immer den gleichen Text bei jedem Spielstart aus der Datei. Bei iOS konnte ich die Textdatei mit folgendem Code laden, jedoch funktioniert das nicht bei Android. Die Build Action der Textdatei steht auf Content. Ist mein erstes Android Projekt.

Folgende Fehlermeldung bekomme ich hier:

Quellcode

1
System.IO.Stream stream = TitleContainer.OpenStream(filename);

Zitat

System.IO.FileNotFoundException has been thrown File.txt

Weiss jemand warum die Textdatei nicht gefunden wird? Wie kann ich die Datei laden? Muss ich etwas an meinem Code ändern oder liegt es nicht am Code?


(Link)


Kompletter Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.IO;
using System.IO.IsolatedStorage;

namespace Androidproject.Android
{
    public class Game1 : Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        private static System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("de-DE");
        private const string filename = "File.txt";
        string[] strs;

        public void LoadFile()
        {
            System.IO.Stream stream = TitleContainer.OpenStream(filename);
            using (var reader = new StreamReader(stream))
            {
                while (!reader.EndOfStream)
                {
                    string line = reader.ReadLine();
                    strs = line.Split(';');
                }
            }
        }

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            graphics.IsFullScreen = true;
            graphics.PreferredBackBufferWidth = 800;
            graphics.PreferredBackBufferHeight = 480;
            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;
        }

        protected override void Initialize()
        {
            base.Initialize();
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            LoadFile();
        }

        protected override void Update(GameTime gameTime)
        {

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            base.Draw(gameTime);
        }
    }
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Big_Santa« (29.10.2018, 15:57)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

29.10.2018, 15:53

Ist die Datei denn nach der Installation deiner App auf dem Smartphone vorhanden? Schau doch mal mit einem Datei-Browser nach.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

29.10.2018, 16:00

Wenn sie in den Assets gespeichert wird, wird sie nirgends als Datei auftauchen. Und wenn sie nicht als Asset abgelegt wurde, dann taucht sie vermutlich nie auf, egal wie :rolleyes:
Anders ausgedrückt: Sollte diese Datei nicht im Assets-Ordner liegen?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

29.10.2018, 16:07

Danke für den Tipp ;) Nachdem ich die Datei in den Assets Ordner verschoben habe funktiniert es. Die Build Action wurde dadurch auch automatisch auf AndroidAsset gesetzt.

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

5

29.10.2018, 16:56

Du kannst Daten allgemein in den SharedPreferences ablegen:

https://stackoverflow.com/questions/2666…xamarin-android

Theoretisch kannst dort ja auch Bilder und Dateien über die bytes speichern. Ist aber nur Key-Value.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

29.10.2018, 19:25

Das würde ich nun wirklich nicht empfehlen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

30.10.2018, 10:03

Weil SharedPreferences nicht gedacht sind für große Daten und entsprechend der App-Start und das Laden langsam ist. Binär-Dateien gehören da echt nicht rein. SharedPrefs laden halt alles, was da drin steht, auch wenn du nur gewisse Teile daraus brauchst, da sie in XML abgelegt werden. Hast du also dort User-Settings drin gespeichert und willst diese anziehen, müssen auch die Binär-Daten mit geladen werden. Bitte nicht machen.

Davon mal abgesehen musst du trotzdem erst ein Asset laden und es in den SharedPreferences ablegen, was die Sache also aufwendiger macht als nur das Asset zu laden. Letztlich sind Assets eben genau für solche Dateien gedacht.

PS: Da wir gerade über Android-Storage reden, werfe ich mal noch die Realm-Datenbank in den Raum, auch wenn das nicht für den hier notwendigen Anwendungszweck passt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (30.10.2018, 10:09)


9

31.10.2018, 09:08

Bei iOS füge ich meine Textdateien einfach immer dem Projekt hinzu. Bei iOS gibt es ja keinen speziellen Ordner für das Ablegen der Dateien und das Laden der Dateien mit TitleContainer.OpenStream(filename) hat so auch noch immer funktioniert.
Oder sollte man die Textdateien auch bei iOS in einem dafür vorgesehenen Ordner ablegen?

(Link)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

31.10.2018, 09:24

Musst du nicht, aber der Übersicht halber wäre ein Unterordner schon nicht ganz verkehrt. Würde ich auch bei den Assets unter Android empfehlen, um etwas Übersicht und Ordnung zu halten. Übrigens sind Symlinks für solche Unterschiede und Unannehmlichkeiten ziemlich praktisch ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige