1

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

如果有人可以提供帮助,我将不胜感激。

4

2 回答 2

0

使用Mobile.Callback.Stub而不是Mobile.Callback用于 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) {
        ....
        }
}
于 2016-04-11T06:38:20.850 回答
0

你绑定的 Go 源码是什么?(封装移动和回调接口)

关于传递实现 Go 接口类型的 Java 类,请参见 https://godoc.org/golang.org/x/mobile/cmd/gobind的“传递目标语言对象到 Go”部分

基本上,生成的 Java 接口类型并不意味着直接使用。相反,Java 类应该扩展生成的 Java 接口的 Stub 类。

于 2016-03-03T14:07:11.550 回答