使用回调的Gomobile android

时间:2016-03-03 08:46:23

标签: android go android-ndk gomobile

我有一个使用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

如果有人可以提供帮助,我会非常感激。

2 个答案:

答案 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) {
        ....
        }
}