[英]How to make multiple okhttp3 requests at the same time Android Studio
下午好,我对 ESP32/android studio 编码还是很陌生,所以我为我的初学者术语道歉。 我目前正在编写一个项目,我可以通过按下我的 android 应用程序上的按钮同时控制多个步进电机,并且电机连接到某些 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 的网络堆栈和资源非常有限,并且无法处理许多同时连接。 如果您的应用程序一次打开太多到 ESP32 的 HTTP 连接,一些可能会失败或必须等待其他人关闭。
相反,您可以在一个请求中完成所有操作,并告诉 ESP32 一次执行多项操作。 将请求作为 URL 中的参数传递,如下所示:
http://ip-address/cmd?step=1&dir=0&ledGREEN=0&ledRED=1
只需让路径/cmd
的 ESP32 上的处理程序查找每个可能参数的存在并适当地响应它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.