繁体   English   中英

Android Studio 如何同时发出多个okhttp3请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM