Frage

Ich muss in der Lage sein, um readAsset von außerhalb der Haupttätigkeit meiner Anwendung zu nennen. Ich habe gehört, wie Leute erwähnen, um den Kontext zu laufen um, aber die Sprache ist sehr vage. Kann jemand die Schritte notwendig, um die Fähigkeit zu nennen readAsset zu einer vorhandenen Klasse hinzuzufügen beschreiben, die nicht die Haupttätigkeit ist? eine öffentliche Funktion in der Haupttätigkeit zu schaffen und mit anderen nennen das werde ich nicht Arbeit als Ort brauchen readAsset zu, hinzuzufügen, ist in einem separaten Thread.

War es hilfreich?

Lösung

public class NonActivity {
    public void doStuff(Context c) {
        //read from assets
        c.getAssets();
        //use assets however
    }
}

Nicht sicher, was Sie fragen, aber vielleicht so etwas wie das? Fügen Sie einfach an die bestehenden Klasse, und verwenden Sie den Kontext, das Vermögen zu erhalten. In Ihrer Tätigkeit rufen Sie die Methode wie folgt aus:

public class MyActivity extends Activity {
  public void OnCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    NonActivity n = new NonActivity();
    n.doStuff(this);
  }
}

Andere Tipps

Beachten Sie alle Dateisystemzugriffe aus dem Haupt-Thread getan werden sollte, so dass Sie sie nicht während onCreate () lesen sollte. Stattdessen sollten Sie einen anderen Thread verwenden, wie zum Beispiel durch eine AysncTask zur Verfügung gestellt.

Vermögen zu lesen, benötigen Sie einen Context , aber Sie nicht haben eine Activity als Context zu verwenden; Sie können die Application Objekt statt.

Android Kontext, ohne in eine Aktivität? Und andere Aktivitäten lose Programmierung?

public class MyApplication extends Application {
    private static MyApplication instance;

    public MyApplication() {
        instance = this;
    }

    public static MyApplication getInstance() {
         return instance;
    }
}

Sie müssen das android:name Attribut auf das <application> Element in AndroidManifest.xml hinzufügen zuerst:

 <application android:name="com.example.MyApplication" ... />

Jetzt können Sie MyApplication.getInstance().getAssets() statisch von überall aufrufen.

Alternativ können Sie verwenden Dagger Dependency Injection einzuspritzen einem Application direkt in Ihr Objekt. (Die Application Kontext Spritzen ist ein bisschen schwierig. Siehe Dagger 2 Android Context Injektion und < a href = "https://github.com/google/dagger/issues/832" rel = "nofollow noreferrer"> diese Frage auf der Gefahr eingereicht gitHub Repo .)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top