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