2016-03-03 139 views
1

我有一個使用go mobile編寫的庫,它應該只有一個回調,但在嘗試實現它時,我會得到兩個附加方法。使用回調的Gomobile android

@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

你綁定的Go源是什麼? (該包裝移動和回調接口)

針對通過該實現Go接口類型的Java類,請參見「傳遞目標語言對象去」的 https://godoc.org/golang.org/x/mobile/cmd/gobind

基本上,生成的Java接口類型不是意味着直接使用。相反,Java類應擴展生成的Java接口的Stub類。

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