社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

android の getAssets() を MainActivity class 以外から使いたい

AppCompatActivity() を継承
MainActivity とは違う新しいクラスを生成し、AppCompatActivity() を継承し、getAssets() を呼び出してみた。

getAssets().open("sample.txt")

コンパイルエラーは起きないものの、以下のエラーが発生。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference

一応、activity クラスを作ったつもりだけど、恐らく正しく作る(使う)ことが出来ていない。
調べてみたところ、MainActivity の context のインスタンスを渡してあげる方が良さそう。

MainActivity の context のインスタンスを渡す

class NonActivityClass(context: Context) {
  val myContext = context
}

# from MainActivity
NonActivityClass(this)

ちなみに、applicationContext という変数があるが、それを(this の代わりに)渡してあげても、エラーは解消されなかった。

Context について

  • Context とは、アプリケーションのグローバルな環境情報を受け渡すために使用されるもの。
  • Context には、Application Context と Activity Context の2種類が存在する。
  • Application Context は Activity クラス内で getApplicationContext() で取得できる。
  • Activity Context は Activity 自身のこと。

即ち少なくとも自分のコードでは、Application Context ではなくて、Activity Context が必要とされていることになると思いますが、両者の違いを理解しないといけない。