我有一个使用go mobile编写的库,它应该只有一个回调但是在尝试实现时,我还有两个额外的方法。
@Override
public Seq.Ref ref() {
return null;
}
@Override
public void call(int i, Seq seq, Seq seq1) {}
问题是,这是从Android Activity上实现回调的正确方法吗?
现在我有下一个:
public class MainActivity extends Activity implements implements Mobile.Callback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Mobile.Client client = Mobile.New("192.168.2.1", 9000, this);
try {
client.Connect();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void OnMessage(String s) {
Log.e("GO", s);
}
@Override
public Seq.Ref ref() {
return null;
}
@Override
public void call(int i, Seq seq, Seq seq1) {
}
}
连接已成功建立,但在回调到我获得的活动时:
panic: runtime error: invalid memory address or nil pointer dereference
如果有人可以提供帮助,我会非常感激。
答案 0 :(得分:0)
你绑定的Go源是什么? (包移动和回调接口)
要传递实现Go接口类型的Java类,请参阅“将目标语言对象传递给Go”部分 https://godoc.org/golang.org/x/mobile/cmd/gobind
基本上,生成的Java接口类型并不是直接使用。相反,Java类应该扩展生成的Java接口的Stub类。
答案 1 :(得分:0)
使用Mobile.Callback.Stub
代替Mobile.Callback
for android
...
Mobile.Client client = Mobile.New("192.168.2.1", 9000, new Callbacks());
...
class Callbacks extends Mobile.Callback.Stub {
@Override
public void OnMessage(String s) {
....
}
}