Как вызвать метод из класса в сервисе из кода c # unity

#java #c# #unity3d

#java #c# #unity3d

Вопрос:

Моя проблема в том, что когда я вызываю свой Java-код из c # в unity, я получаю нулевую ссылку, но мой класс на 100% не равен нулю. У меня есть идея, что проблема в том, что мой сервис запущен в другом процессе, но я не нашел никакой информации о вызове методов java, которые не расширяют unityplayeractivity в классе.

Я попытался получить свой экземпляр сервиса и получить необходимый класс для вызова метода, но это не работает. Также я попытался вызвать метод из своего сервиса. Я получаю все 3 отладки в unity и нулевую ссылку, выданную после. Теперь мой код выглядит следующим образом:

 if (condition)
    {
        Debug.Log("1111111111111111111111111111111111111111111111111");
        AndroidJavaClass javaClass = new AndroidJavaClass("com.fileControllers.FileTransferService");
        Debug.Log("22222222222222222222222222222222222222222222222222");
        AndroidJavaObject controller = javaClass .GetStatic<AndroidJavaObject>("serverContactsMessagesController");
        Debug.Log("33333333333333333333333333333333333333333333333333");
        controller.Call("UnregisterRadio", id, cai);
    }
  

Мой класс FileTransfer выглядит следующим образом:

 package com.fileControllers;
public class FileTransferService extends Service  {
public static SIPMessageController serverContactsMessagesController;
public static FileTransferService Instance;

    @Override
    public void onCreate()
    {
        super.onCreate();
        Log.d("TestManualDisconnect", "Starting file transfer service");
        Instance = this;
        serverContactsMessagesController = new SIPMessageController();
    }
}
  

Мой класс SIPMessageController:

 package com.fileControllers.SIPMessage;
public SIPMessageController()
{
    Start();
}
// Use this for initialization
void Start () {
    serverTextNotifications = new ServerMessagesHandler(FileTransferService.mContext);
    client = new UDPListener(m_port);
    client.start();
    listener = new SIPMessageListener();
    client.setMessageRecivedListener(listener);
    responseController = new SIPResponseController();
    //loginController = new ServerContactsMessagesController();
    Log.d("TestSIP", "Started sip messages controller");
}
  

И отменить регистрацию метода:

 public void UnregisterRadio(int serverID, int CAI)
{
    Log.d("TESTTESTTEST", "UNREGISTERING RADIO");
    try {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    SIPRegistrationMessage message = new SIPRegistrationMessage(ExtensionTypes.Register);
    message.userName = "unregister";
    SIPHeader header = new SIPHeader(false, true, true, false, true);
    int reqNumber = new Random().nextInt(1000000);
    stream.write(header.Render());
    ConvertSIPData.WriteVarInt(stream, reqNumber);
    stream.write(message.Render());
    byte[] messageBytes = stream.toByteArray();
    DatagramPacket packet = new DatagramPacket(messageBytes, messageBytes.length, GetAccessuarByRadioID(serverID, CAI), m_port);
    client.Send(packet);
    }
    catch (IOException e)
    {
        Log.d("Errors", "Error on Sending SIP message "   e.getMessage());
    }
}
  

Не думаю, что эта ошибка помогает, но:

 E/Unity: NullReferenceException: Object reference not set to an instance of an object
  at UIChatMessages.ConnectToServer () [0x000bb] in <c21560bc798f49c3b4e266f4b3a67dd1>:0 
  at UnityEngine.Events.InvokableCall.Invoke () [0x00011] in <b6d510486de34305839d30de90e040c0>:0 
  at UnityEngine.Events.UnityEvent.Invoke () [0x00023] in <b6d510486de34305839d30de90e040c0>:0 
  at UnityEngine.UI.Button.Press () [0x00027] in <64e28a9e74f14b82b76e6bb05ae2a678>:0 
  at UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) [0x00011] in <64e28a9e74f14b82b76e6bb05ae2a678>:0 
  at UnityEngine.EventSystems.ExecuteEvents.Execute (UnityEngine.EventSystems.IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00008] in <64e28a9e74f14b82b76e6bb05ae2a678>:0 
  at UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents EventFunction`1[T1] functor) [0x00070] in
  

какие-либо решения? теперь он работает с activity, которая передает метод в мой сервис, но я хочу вызвать метод service из моего кода c #

Комментарии:

1. Можете ли вы показать нам код классов AndroidJavaClass и AndroidJavaObject?