我正在尝试创建一个包含将由其他人使用的共享代码的
android项目.
在这个项目中,我只有POJO,没有特定于android的类.
在这个项目中,我只有POJO,没有特定于android的类.
某些功能需要调用某些活动,并且取决于结果.
我的POJO类在使用时会引用调用活动,但这是在运行时发生的,我无法控制这些活动的实现.
我的问题是,通过调用活动的引用,我可以startActivityForResult但我无法添加onActivityResult,它可能存在于调用活动中但不知道我使用的requestCode.
那么我的问题是如何在活动返回时从常规java对象中知道?因为,据我所知,我只能在Activity类上实现onActivityResult.
谢谢!
解决方法
这个设置会遇到很多问题,但这就是你想要开始的方式:
您必须在项目中包含一个活动,该活动除了启动您希望从中获取结果的活动之外什么也不做,并将其存储在全局可访问的存储(例如单个或静态字段)中.
class Pojo { static final ConditionVariable gate = new ConditionVariable(); static int result; int m(Context context) { context.startActivity(new Intent(context,ForwarderActivity.class)); gate.block(); return result; } } class ForwarderActivity extends Activity { private boolean started = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!started) { started = true; startActivityForResult(new Intent("ContactsProvider"),1); } } @Override protected void onActivityResult(int requestCode,int resultCode,Intent data) { Pojo.result = resultCode; Pojo.gate.open(); } }
但是有几个问题.就像你的POJO的方法不能从主(UI)线程调用,因为你需要将异步调用(startActivityForResult())转换为同步调用(Pojo.m())和要从中接收信息的活动将在主线程上启动,因此您无法在Pojo.m()中阻止它…
无论如何,代码不起作用,但如果你真的必须坚持这个设置,你可以看到哪条路.但是你应该尝试提出一些其他的方法来获取数据,比如内容提供商.