我需要能够从我的应用程序的主要活动之外调用 readAsset。我听说有人提到需要传递上下文,但语言非常模糊。有人可以描述将调用 readAsset 的能力添加到不是主要活动的现有类的必要步骤吗?在主要活动中创建一个公共函数并让其他调用不起作用,因为我需要将 readAsset 添加到的地方是在一个单独的线程中。
			
			7158 次
		
3 回答
            8        
        
		
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);
  }
}
    于 2010-11-08T17:52:36.543   回答
    
    
            2        
        
		
要读取资产,您需要 a Context,但不必使用 aActivity作为您的Context; 您可以改用该Application对象。
没有活动的Android Context?和其他无活动编程?
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()从任何地方进行静态调用。
或者,您可以使用Dagger依赖注入将一个Application直接注入您的对象。(注入Application上下文有点棘手。请参阅Dagger 2 injectioning Android Context和这个问题在 Danger github repo 上提交。)
于 2019-04-20T23:27:40.983   回答
    
    
            0        
        
		
请注意,所有文件系统访问都应在主线程之外完成,因此您不应在 onCreate() 期间读取它们。相反,您应该使用另一个线程,例如 AysncTask 提供的线程。
于 2017-06-23T15:33:38.047   回答