Как вызвать метод из класса в службе из кода C # Unity - PullRequest
1 голос
/ 04 апреля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...