getResources() Problem in neuer Klasse

  • Antworten:10
  • Bentwortet
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 10:09:31 via Website

Ich lese Daten aus einer Datei und packe sie in einen String, das funktioniert auch.
Jetzt wollte ich der Übersichlichkeit wegen die Methode in eine eigene Java Datei packen. Jetzt aber markiert Android Studio die getResources() rot. Hier mein Code:

    import android.text.TextUtils;
    import android.widget.Toast;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;


    public class LadeData {


        public static void lesefiles1(){   
            int sa;

            try {

                InputStream stream = getResources().openRawResource(R.raw.farben);
                BufferedReader myReader = new BufferedReader(
                        new InputStreamReader(stream));
                sa=0;
                boolean sa2;
                while (sa<MainActivity.maxspeicherplatz) {
                    MainActivity.farben[sa]   = myReader.readLine();
                    sa2= TextUtils.isEmpty(MainActivity.farben[sa]);
                    if(sa2==true){sa=MainActivity.maxspeicherplatz;}
                    sa=sa+1;
                }
                myReader.close();
}
    }
Kommentieren
Beste Antwort
Ludy
  • Admin
  • Forum-Beiträge: 7.957

03.06.2018, 10:27:25 via Website

Da hat Pascal recht und dann gibts noch ein Paar andere Dinge die unschön sind.

sa=sa+1; in sa++;

ändern, wenn nur wirklich eins hochgezählt werden soll.

MainActivity.maxspeicherplatz MainActivity.MAX_SPEICHER_PLATZ

nehme an, dass das eine Konstante ist und Konstanten werden groß geschrieben.

Edit für den Context:

import android.text.TextUtils;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;


public class LadeData {


    public static void lesefiles1(Context ctx){   
        int sa;

        try {

            InputStream stream = ctx.getResources().openRawResource(R.raw.farben);
            BufferedReader myReader = new BufferedReader(
                    new InputStreamReader(stream));
            sa=0;
            boolean sa2;
            while (sa < MainActivity.maxspeicherplatz) {
                MainActivity.farben[sa]   = myReader.readLine();
                sa2= TextUtils.isEmpty(MainActivity.farben[sa]);
                if(sa2==true){sa=MainActivity.maxspeicherplatz;}
                sa++;
            }
            myReader.close();
        } catch (Exception e) {
            // ToDo
        }
}

— geändert am 03.06.2018, 10:29:54

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Pascal P.
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.06.2018, 10:18:58 via Website

Hallo Fragensteller,
getResource() kann nur auf einem Context aufgerufen werden.
Dh. du musst der Methode Activity oder Context übergeben.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Ludy
Kommentieren
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 10:24:26 via Website

Context hatte ich schon mal versucht, da wurde aber nichts geladen. Vielleicht wars aber an der falschen Stelle

       Context ctx
        try {

            InputStream stream = ctx.getResources().openRawResource(R.raw.farben);
Hilfreich?
Kommentieren
Beste Antwort
Ludy
  • Admin
  • Forum-Beiträge: 7.957

03.06.2018, 10:27:25 via Website

Da hat Pascal recht und dann gibts noch ein Paar andere Dinge die unschön sind.

sa=sa+1; in sa++;

ändern, wenn nur wirklich eins hochgezählt werden soll.

MainActivity.maxspeicherplatz MainActivity.MAX_SPEICHER_PLATZ

nehme an, dass das eine Konstante ist und Konstanten werden groß geschrieben.

Edit für den Context:

import android.text.TextUtils;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;


public class LadeData {


    public static void lesefiles1(Context ctx){   
        int sa;

        try {

            InputStream stream = ctx.getResources().openRawResource(R.raw.farben);
            BufferedReader myReader = new BufferedReader(
                    new InputStreamReader(stream));
            sa=0;
            boolean sa2;
            while (sa < MainActivity.maxspeicherplatz) {
                MainActivity.farben[sa]   = myReader.readLine();
                sa2= TextUtils.isEmpty(MainActivity.farben[sa]);
                if(sa2==true){sa=MainActivity.maxspeicherplatz;}
                sa++;
            }
            myReader.close();
        } catch (Exception e) {
            // ToDo
        }
}

— geändert am 03.06.2018, 10:29:54

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Hilfreich?
Pascal P.
Kommentieren
Jokel
  • Forum-Beiträge: 1.528

03.06.2018, 10:36:42 via Website

Halo
das liegt daran das du keinen Context zur Activity hast . Deine MainActivity erbt von Activity und somit sind die Metohden verfügbar. Du brauchst den Context, den du beim aufruf der Methode mit übergeben musst.

// in der Main
LadeData ld = new LadeData();
ld.lesefiles1(this);

// Kalsse LadeData
public static void lesefiles1(Context context) {

    InputStream stream =    context.getResources().openRawResource(R.raw.farben);

}

— geändert am 03.06.2018, 11:52:34

Hilfreich?
Fragensteller
Kommentieren
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 10:41:00 via Website

Danke, dann hatte ich das mit dem Context einfach nur falsch verstanden.

Hilfreich?
Kommentieren
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 10:44:55 via Website

Wenn ich jetzt noch einen Toast einbauen will, wie funktioniert das mit dem Context?

Toast.makeText(getBaseContext(),
                    "Farben geladen!",
                   Toast.LENGTH_SHORT).show();
Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.528

03.06.2018, 11:06:26 via Website

Hallo eigentlich genau so.

void lade(Context c){

Toast.makeText(c,"Farben geladen!",
        Toast.LENGTH_SHORT).show();

}

Hilfreich?
Kommentieren
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 11:28:05 via Website

Ich wollte den Toast gern als Teil von LadeData haben:

 myReader.close();
Toast.makeText(getBaseContext(),
                    "Farben geladen!",
                   Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            // ToDo
        }

Wenn ich 20 Dateien lade, müsste ich sonst 20 neue Methoden basteln.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.528

03.06.2018, 11:43:13 via Website

Hi
dies war ein Beispiel.
ersetze getBaseContext() durch den übergebenen Context.
oder wenn es nicht gehen solte dein context.getApplicationContext()

lg

Hilfreich?
LudyFragensteller
Kommentieren
Fragensteller
  • Forum-Beiträge: 49

03.06.2018, 12:02:58 via Website

Besten Dank.

Hilfreich?
Kommentieren