문제

I need to be able to be able to call readAsset from outside of the main activity of my application. I have heard people mention needing to pass the Context around, but the language has been very vague. Can someone describe the steps necessary to add the ability to call readAsset to an existing class that is not the main activity? Creating a public function in the main activity and having others call that will not work as the place I need to add readAsset to, is in a separate thread.

도움이 되었습니까?

해결책

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

Not sure what you're asking, but perhaps something like this? Just add to the existing class, and use the context to retrieve the assets. In your activity call the method like this:

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

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

다른 팁

Note all file system accesses should be done off the main thread, so you shouldn't read them during onCreate(). Instead you should use another thread, such as provided by an AysncTask.

To read assets, you need a Context, but you don't have to use an Activity as your Context; you can use the Application object instead.

Android Context without being in an activity? And other activity-less programming?

public class MyApplication extends Application {
    private static MyApplication instance;

    public MyApplication() {
        instance = this;
    }

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

You'll need to add the android:name attribute to the <application> element in AndroidManifest.xml first:

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

Now you can call MyApplication.getInstance().getAssets() statically from anywhere.

Alternately, you could use Dagger dependency injection to inject an Application directly into your object. (Injecting the Application context is a bit tricky. See Dagger 2 injecting Android Context and this issue filed on the Danger github repo.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top