2016-03-03 13 views
1

У меня есть библиотека, написанная с использованием go mobile, и она должна иметь только один обратный вызов, но при попытке реализовать его я получаю два дополнительных метода.Gomobile android с использованием обратных вызовов

@Override 
public Seq.Ref ref() { 
    return null; 
} 

@Override 
public void call(int i, Seq seq, Seq seq1) {} 

Вопрос в том, что это правильный способ реализовать обратный вызов из Android-активности?

Прямо сейчас у меня есть следующий:

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, который вы связываете? (Пакет мобильного и обратный вызов интерфейса)

Для прохождения класса Java, который реализует Перейти тип интерфейса, смотрите раздел «Передача объектов целевого языка Go» из https://godoc.org/golang.org/x/mobile/cmd/gobind

В основном, генерируемый тип интерфейса Java не предназначенный для непосредственного использования. Вместо этого класс Java должен расширять класс Stub созданного Java-интерфейса.

0

Использование Mobile.Callback.Stub вместо Mobile.Callback для андроид

... 
Mobile.Client client = Mobile.New("192.168.2.1", 9000, new Callbacks()); 

... 
class Callbacks extends Mobile.Callback.Stub { 
     @Override 
     public void OnMessage(String s) { 
     .... 
     } 
}