#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?