Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以及为什么使用OKHttp发送多端口(最佳分块)?_Android_Multithreading_Http_Okhttp - Fatal编程技术网

Android 如何以及为什么使用OKHttp发送多端口(最佳分块)?

Android 如何以及为什么使用OKHttp发送多端口(最佳分块)?,android,multithreading,http,okhttp,Android,Multithreading,Http,Okhttp,我知道基于HttpUrlConnection使用OKHttp更好,但我不知道为什么 为什么使用OKHttp而不是实现的HTTPUrlConnection更好 和。。如何发送混合数据。发布变量和文件。最好是有多线程的可能 下面是我的客户端使用HttpUrlConnection的一个示例。在OKHTTP中会是什么样子 Dataclass和DataPackage只是用于保存文件和数据以进行发送的模式 将使用FactoryManager LazyLoading调用客户端if self public st

我知道基于HttpUrlConnection使用OKHttp更好,但我不知道为什么

为什么使用OKHttp而不是实现的HTTPUrlConnection更好

和。。如何发送混合数据。发布变量和文件。最好是有多线程的可能

下面是我的客户端使用HttpUrlConnection的一个示例。在OKHTTP中会是什么样子

Dataclass和DataPackage只是用于保存文件和数据以进行发送的模式

将使用FactoryManager LazyLoading调用客户端if self

public static DefaultHttpPostClient getEnterpriseHttpManager() {
    if (defaultHttpPostClient == null) {
        defaultHttpPostClient = new DefaultHttpPostClient();
    }
    return defaultHttpPostClient;
}
HttpClient的构造函数每次调用时都会请求它的设置

  public static HttpConnectionSettings getDefaultHttpConnectionSettings() throws MalformedURLException {
    HttpConnectionSettings httpConnectionSettings = new HttpConnectionSettings();
    httpConnectionSettings.setPost(true);
    httpConnectionSettings.setMultiThreaded(true);
    httpConnectionSettings.setUrl(new URL(MYURL);
    return httpConnectionSettings;
}

   public HttpResult executeRequest() {
    HttpURLConnection connection = null;
    OutputStream out = null;
    InputStream in = null;
    HttpResult httpResult = new HttpResult();
    try {
        connection = Mfactory.getOkHttpClient().open(httpConnectionSettings.getUrl());

        connection.setConnectTimeout(300000);
        connection.setUseCaches(false);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestMethod((httpConnectionSettings.isPost()) ? "POST" : "GET");
        connection.setRequestProperty("Connection", "Keep-Alive");
        connection.setRequestProperty("Cache-Control", "no-cache");
        connection.setReadTimeout(300000);
        connection.setDefaultUseCaches(true);
        connection.setRequestProperty("Accept-Charset", "UTF-8");
        if (httpConnectionSettings.isPost()) {
            connection.setRequestProperty("Content-Type", "multipart/form-data, boundary=XXXXXXXXXXYY");
        }

        out = connection.getOutputStream();

        MultipartEntity multipartEntity = new MultipartEntity();

        for (Object aMData : dataClass.getData().entrySet()) {
            Map.Entry mapEntry = (Map.Entry) aMData;
            String keyValue = (String) mapEntry.getKey();
            String value = (String) mapEntry.getValue();
            if (value != null) {
                multipartEntity.addPart(new StringPart(keyValue, value));
            } else {
                Log.d(this.getClass().getSimpleName(), "Value was null for key " + keyValue);
            }
        }


        for (DataPackage dataPackage : dataClass.getDataPackages()) {

            if (dataPackage.getbFile() != null) {
                multipartEntity.addPart(new BytePart("upfile", dataPackage.getbFile(), dataPackage.getfName()));
            } else if (!dataPackage.getsFile().equals("")) {
                multipartEntity.addPart(new FilePart(new File(dataPackage.getsFile()), dataPackage.getfName(), dataPackage.getMimetype()));
            } else if (dataPackage.getmFile() != null) {
                multipartEntity.addPart(new FilePart(dataPackage.getmFile(), dataPackage.getfName(), dataPackage.getMimetype()));
            }
            if (dataPackage.getMimetype() != null) {
                multipartEntity.addPart(new StringPart("mime", dataPackage.getMimetype()));
            }
            if (dataPackage.getFilesize() != 0) {
                multipartEntity.addPart(new StringPart("filesize_orig", String.valueOf(dataPackage.getFilesize())));
            }
            if (dataPackage.getFilepath() != null) {
                multipartEntity.addPart(new StringPart("filepath_orig", dataPackage.getFilepath()));
            }
            if (dataPackage.getfName() != null) {
                multipartEntity.addPart(new StringPart("filename_orig", dataPackage.getfName()));
            }
            if (dataPackage.getLastmodified() != 0) {
                multipartEntity.addPart(new StringPart("lastmodified_orig", String.valueOf(dataPackage.getLastmodified())));
            }
            if (dataPackage.getAdded() != 0) {
                multipartEntity.addPart(new StringPart("added_orig", String.valueOf(dataPackage.getAdded())));
            }
        }
        multipartEntity.writeTo(out);


        if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
            Log.e("httpResult", "Response: " + connection.getResponseCode() + " " + connection.getResponseMessage() + " content:" + connection.getURL());
            httpResult.setSuccess(false);
        } else {
            Log.d("httpResult", "Response: " + connection.getResponseCode() + " " + connection.getResponseMessage() + " content:" + connection.getURL());
            httpResult.setSuccess(true);
            httpResult.setInputStream(connection.getInputStream());
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            for (DataPackage dataPackage : dataClass.getDataPackages()) {
                if (dataPackage.isDeleteAfter()) {
                    new File(dataPackage.getFilepath()).delete();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (out != null) {
            try {
                out.close();
            } catch (Exception e) {
            }
        }
        if (in != null) {
            try {
                in.close();
            } catch (Exception e) {
            }
        }
        return httpResult;
    }
}
切换到OKHttp有意义吗?我有很多要求。有时有大约100个线程打开,每个线程都有一个执行器,这是它自己的HttpRequest


我为什么要使用OKHttp?到目前为止非常感谢。

在您的情况下,最简单的方法是使用okhttp urlconnection模块中的OkUrlFactory。然后,您就可以使用OkHttp 2,而无需进行太多更改

如果想让OkHttp处理调度请求,您需要切换到OHttp的新API。但在你的情况下没有义务这么做