在Android中访问回调上的活动变量
我想通过返回的回调访问在OnCreate中初始化的全局变量 并发症:在Android中访问回调上的活动变量,android,callback,native,Android,Callback,Native,我想通过返回的回调访问在OnCreate中初始化的全局变量 并发症: < P>回调来自本地C++代码,因此我将IngItAcess函数中的活动对象传递给C++代码,使C++代码回调java代码。这非常好,因为当从C调用Java方法时,我能够记录日志++ >P>现在,当我从C++代码中得到回调时,我尝试调用一个名为PC的对象(Peer-Calnod)的方法。但现在,当收到回调时,pc总是空的,因此引发空指针异常 我认为这是因为我通过的实例和PC初始化的实例是不同的,我甚至尝试将上下文/活动实例
我认为这是因为我通过的实例和PC初始化的实例是不同的,我甚至尝试将上下文/活动实例传递给C++代码,但是这也不起作用。p> 你知道我做错了什么吗
这是我的活动代码: @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialize(new MainActivity()); // This is native function which takes the object name
PeerConnectionFactory factory = new PeerConnectionFactory();
MediaConstraints pcConstraints = sdpMediaConstraints;
pcConstraints.optional.add(
new MediaConstraints.KeyValuePair("RtpDataChannels", "true"));
pcConstraints.optional.add(
new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
pc = factory.createPeerConnection(iceServers, pcConstraints, pcObserver); // This is where pc is assigned
}
//Callback from the C++ code
public void onConnected(){
Log.d("Log", "Came in onConnected state from C++ " ); // This log is printed and works fine
pc.setSdp(); // This is where it fails, it just doesn't find pc
}
我能做些什么来访问回调中的pc变量?我已经尝试将它存储为静态变量,稍后再访问它,但这也不起作用
编辑:
日志:
编辑2:
所以我想我做错了什么,我有一个服务和一个AIDL,所以有两个不同的进程,所以不管发生什么,变量都是空的
在收到另一个进程的回调后,我仍然不知道如何访问一个进程的变量,而不是
initialize(new MainActivity());
写这个
initialize(this);
有两点需要注意:
- 自己创建活动实例是非常糟糕的做法
- 执行
时,不会调用newmainActivity()
,因此onCreate(…)
永远不会初始化pc
initialize()
期间本机代码回调onConnected()
。那么就这么做吧:
PeerConnectionFactory factory = new PeerConnectionFactory();
MediaConstraints pcConstraints = sdpMediaConstraints;
pcConstraints.optional.add(
new MediaConstraints.KeyValuePair("RtpDataChannels", "true"));
pcConstraints.optional.add(
new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
pc = factory.createPeerConnection(iceServers, pcConstraints, pcObserver); // This is where pc is assigned
initialize(this); // This is native function which takes the object name
正如我提到的,实际的问题是我试图跨流程访问变量。所以我最终通过使用aidl回调机制解决了这个问题。这使我可以使用登录侦听器机制从后台服务访问UI对象。请将添加了日志的logcat发布到post这是logcat中的全部内容?(堆栈似乎被截断)。非常简单的检查:您确定
factory.createPeerConnection
从不返回null吗?是的,我确定pc不为null,因为我将该pc变量用于其他函数,它们工作正常。堆栈有许多不必要的日志来自RESIP C++代码。此外,我还尝试通过服务初始化应用程序。Yopu想让我创建我相关课程的贴纸,并为您发布它们吗?