簡體   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