gpt4 book ai didi

java - 如何在 Android java 插件端等待异步操作(任何 I/O)?

转载 作者:行者123 更新时间:2023-12-02 11:33:55 25 4
gpt4 key购买 nike

对于统一游戏,我需要使用 android-plugin 中的库来发送 websocket 请求。我发现我不知道如何让c#代码等待android插件中的异步操作!

我提供了一个概念验证案例(带有简单的 http get 请求)来以简单的方式提出我的问题。这是我的代码,不起作用:

package com.example.plug2unity1;
import java.io.IOException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Plug1Class {
static OkHttpClient client = new OkHttpClient();
static String doGetRequest(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();

Response response = client.newCall(request).execute();
return response.body().string();
}
public static String GetPlug2Text() throws IOException {
String res = "";
try {
res = doGetRequest("http://www.google.com");
} catch (IOException e) {
e.printStackTrace();
}
return res;
}
}


Unity 脚本必须调用插件:

void Start () {
TextMesh txtm = GetComponent<TextMesh> ();
var plugin = new AndroidJavaClass("com.example.plug2unity1.Plug1Class");
txtm.text = plugin.CallStatic<string>("GetPlug1Text");
}

编辑:问题是“不是”如何进行http调用,很明显,从c#我可以做到这一点,我想了解“c#如何等待插件的异步操作结果,因为它是http 调用或 I/O 操作,与 javascript 中的“promises”相同。

结果:
我的 TextMesh 不会更改文本,而如果我在插件端执行没有任何异步的 POC,则它可以工作。我怎样才能让它发挥作用?

最佳答案

使用回调来执行此操作。从 C# 调用 Java 函数。在 Java 函数中,启动新线程来执行该任务。该任务完成后,执行从 Java 到 C# 的回调,让您知道任务已完成。

C# 示例代码:

void makeRequestOnJava() 
{
TextMesh txtm = GetComponent<TextMesh> ();
var plugin = new AndroidJavaClass("com.example.plug2unity1.Plug1Class");
txtm.text = plugin.CallStatic<string>("GetPlug1Text");
}

//Will be called from C# when the request is done
void OnRequestFinished()
{

}

然后,在 Java 端,当您的任务完成时,使用 UnityPlayer.UnitySendMessage 调用 C# 端的 OnRequestFinished 函数。

UnityPlayer.UnitySendMessage("GameObjectName", "OnRequestFinished", null);

您可以了解如何设置和使用UnityPlayer.UnitySendMessage函数here .

关于java - 如何在 Android java 插件端等待异步操作(任何 I/O)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49088877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com