getResources() Problem in neuer Klasse

  • Antworten:10
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 47

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();
}
    }
Diskutiere mit!
Beste Antwort
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.158

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.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

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?
Diskutiere mit!
  • Forum-Beiträge: 47

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?
Diskutiere mit!
Beste Antwort
Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 7.158

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.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 482

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?
Diskutiere mit!
  • Forum-Beiträge: 47

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?
Diskutiere mit!
  • Forum-Beiträge: 482

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?
Diskutiere mit!
  • Forum-Beiträge: 47

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?
Diskutiere mit!
  • Forum-Beiträge: 482

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?
Diskutiere mit!

Empfohlene Artikel