Androidメインアクティビティ以外から資産を読む方法
質問
アプリケーションのメインアクティビティの外部から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に提出されました.)