質問

アプリケーションのメインアクティビティの外部からReadAssetを呼び出すことができる必要があります。私は人々がコンテキストを渡す必要があると言及しているのを聞いたことがありますが、言語は非常に曖昧です。誰かが、メインアクティビティではない既存のクラスにreadassetを呼び出す機能を追加するために必要な手順を説明できますか?メインアクティビティでパブリック関数を作成し、他の人に電話をかけることは、readAssetを追加する必要がある場所として機能しないようにすることは、別のスレッドにあります。

役に立ちましたか?

解決

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

あなたが何を求めているのかわかりませんが、おそらくこのようなものですか?既存のクラスに追加するだけで、コンテキストを使用して資産を取得します。アクティビティでは、次のような方法を呼び出します。

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

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

他のヒント

注意してください。すべてのファイルシステムアクセスはメインスレッドから実行する必要があるため、OnCreate()でそれらを読み取らないでください。代わりに、aysnctaskによって提供されるような別のスレッドを使用する必要があります。

資産を読むには、aが必要です Context, 、しかしあなた しないでください 使用する必要があります Activity あなたとして Context;使用できます Application 代わりにオブジェクト。

Androidコンテキストがアクティビティにならないようにしますか?その他のアクティビティレスプログラミング?

public class MyApplication extends Application {
    private static MyApplication instance;

    public MyApplication() {
        instance = this;
    }

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

追加する必要があります android:name の属性 <application> の要素 AndroidManifest.xml 最初:

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

これで電話することができます MyApplication.getInstance().getAssets() どこからでも静的に。

または、使用することもできます 短剣 ANを注入するための依存性注入 Application あなたのオブジェクトに直接。 (注入 Application コンテキストは少し難しいです。見る Androidコンテキストを注入するダガー2この問題は、Danger Github Repoに提出されました.)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top