如何使多个okhttp3请求在同一时间Android Studio



下午好,我仍然是ESP32/android studio编码的新手,所以我为我的初学者术语道歉。我目前正在编码一个项目,我可以控制多个步进电机在同一时间从我的安卓应用程序上的一个按钮的按下,电机连接到某些ESP32 GPIO引脚,我使用okhttp3客户端以及。我的代码如下:

public class Connectivity {
public static String geturl (String url_esp32){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url_esp32)
.build();

try
{
Response response = client.newCall(request).execute();
return response.body().string();
} catch(IOException error) {
return error.toString();
}
}

}

上面的是我连接esp32请求的连接页面。

PBNow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// request information from esp32
// PB sandwich now, disable jelly motor
request_to_url("STEP");
request_to_url("DIR");
request_to_url("STEP2");
request_to_url("DIR2");
request_to_url("STEP4");
request_to_url("DIR4");
request_to_url("ledRED");
request_to_url("ledGREEN");
}
});

上面的是我调用esp32请求的方式。我遇到的问题是,当这些request_to_url行逐行,但我希望他们都在同一时间运行。这可能吗?

下面是我的request_to_url函数和request_data函数。

public void request_to_url (String command) {
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isConnected()) {
new request_data().execute("http://" + ip_address + "/" + command);
}else {
Toast.makeText(activity_2.this, "Not connected  ", Toast.LENGTH_LONG).show();
}
}

private class request_data extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... url)
{
return Connectivity.geturl(url[0]);
}
@Override
protected void onPostExecute(String result_data) {
if(result_data != null)
{
}else{
Toast.makeText(activity_2.this, "Null data", Toast.LENGTH_LONG).show();
}
}
}

如果代码很潦草,我很抱歉,我还是个新手。非常感谢。

除了你的应用程序中需要触发多个请求的混乱代码之外,ESP32的网络堆栈和资源非常有限,无法处理许多同时连接。如果你的应用打开了太多的HTTP连接到ESP32,一些可能会失败或不得不等待其他关闭。

相反,您可以在单个请求中完成所有操作,并告诉ESP32一次执行多项操作。将请求作为URL中的参数传递,如下所示:

http://ip-address/cmd?step=1& dir = 0, ledGREEN = 0, ledRED = 1

让ESP32上的处理程序为路径/cmd查找每个可能参数的存在并适当地响应它。