Android How to read an asset from outside of main activity

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);
  }
}

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.)