android中使用Okhttp进行网络请求的工具类(二)

原创 2016年06月02日 11:18:36
package com.example.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.FileNameMap;
import java.net.URLConnection;
import java.util.Map;

import android.R.string;
import android.provider.MediaStore.Files;

import cn.jpush.a.a.f;

import com.fangz.maot.FindPwdActivity;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.Headers;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;

public class OkHttp_Utils {
    // ��ʼ��
    private static final OkHttpClient okHttpClient = new OkHttpClient();

    // ��ȡ ��������Request
    private static Request getRequestFromUrl(String urlString) {
        Request request = new Request.Builder().url(urlString).build();
        return request;
    }

    /**
     * ��ȡ Response ��Ӧ����
     * 
     * @param urlString
     * @return
     * @throws IOException
     */
    private static final Response getResopnseFromUrl(String urlString)
            throws IOException {
        Request request = getRequestFromUrl(urlString);
        Response response = okHttpClient.newCall(request).execute();

        return response;
    }

    /**
     * �Զ��壺 ��ȡResponseBody����
     * 
     * @param urlString
     * @return
     * @throws IOException
     */
    private static ResponseBody getResponseBodyFromUrl(String urlString)
            throws IOException {
        Response response = getResopnseFromUrl(urlString);
        // isSuccessful ��Ӧ���
        if (response.isSuccessful()) {
            return response.body();
        }
        return null;
    }

    /**
     * ͨ���������� ��ȡ�ַ�
     * 
     * @param urlString
     * @return
     * @throws IOException
     */
    public static String loadStringFromUrl(String urlString) throws IOException {
        ResponseBody responseBody = getResponseBodyFromUrl(urlString);
        if (responseBody != null) {
            return responseBody.string();
        }
        return null;
    }

    /**
     * ��ȡ���������ص�����
     * 
     * @param urlString
     * @return
     * @throws IOException
     */
    public static byte[] loadByteFromUrl(String urlString) throws IOException {
        ResponseBody responseBody = getResponseBodyFromUrl(urlString);
        if (responseBody != null) {
            return responseBody.bytes();
        }
        return null;
    }

    /**
     * ��ȡ����������������
     * 
     * @param urlString
     * @return
     * @throws IOException
     */
    public static InputStream loadStreamFromUrl(String urlString)
            throws IOException {
        ResponseBody responseBody = getResponseBodyFromUrl(urlString);
        if (responseBody != null) {
            return responseBody.byteStream();
        }
        return null;
    }

    // ///////////////////////////////////////////////////
    //
    // //////////////////////////////////////////////////

    // ///////////////////////////////////////////////////////
    // Post 同步 网络访问
    // ///////////////////////////////////////////////////////

    /**
     * 构建Post请求方式
     * 
     * @param urlString
     * @param requestBody
     * @return
     */
    private static Request buildPostRequest(String urlString,
            RequestBody requestBody) {

        Request.Builder builder = new Request.Builder();
        builder.url(urlString).post(requestBody);
        return builder.build();
    }

    /**
     * @param urlString
     * @param requestBody
     * 
     * @return
     * @throws IOException
     */
    private static String postRequestBody(String urlString,
            RequestBody requestBody) throws IOException {
        Request request = buildPostRequest(urlString, requestBody);
        Response response = okHttpClient.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().string();

        }
        return null;
    }

    /**
     * Psot 网络请求发送键值对。获取RequestBody对象
     * 
     * @param map
     * @return
     */
    private static RequestBody buildRequestBody(Map<String, String> map) {

        FormEncodingBuilder builder = new FormEncodingBuilder();
        if (map != null && !map.isEmpty()) {
            // 遍历Map集合
            for (Map.Entry<String, String> entry : map.entrySet()) {

                builder.add(entry.getKey(), entry.getValue());
            }
        }
        return builder.build();
    }

    /**
     * Post 网络访问 提交键值对
     * 
     * @param urlString
     * @param map
     * @return
     * @throws IOException
     */
    public static String postKeyValuesPair(String urlString,
            Map<String, String> map) throws IOException {

        RequestBody requestBody = buildRequestBody(map);

        return postRequestBody(urlString, requestBody);
    }

    /**
     * Post 上传文件 urlString 网络地址 map 键值对
     * 
     * files 提交的文件
     * 
     * 
     * formFileName 每个需要提交的文件对应的文件input的name;
     * 
     * @throws IOException
     */

    public static String postUPloadFiles(String urlString,
            Map<String, Object> map, File[] files, String[] formFileName)
            throws IOException {

        RequestBody requestBody = builRequestBody(map, files, formFileName);

        return postRequestBody(urlString, requestBody);
    }

    /**
     * 生成提交分块请求的RequestBody对象
     * 
     * @param map
     * @param files
     * @param formFileName
     * @return
     */
    private static RequestBody builRequestBody(Map<String, Object> map,
            File[] files, String[] formFileName) {
        MultipartBuilder builder = new MultipartBuilder()
                .type(MultipartBuilder.FORM);
//      // 第一部分
//      if (map != null) {
//          for (Map.Entry<String, String> entry : map.entrySet()) {
//              builder.addPart(
//                      Headers.of("Content-Disposition", "from-data;name=\""
//                              + entry.getKey() + "\""),
//                      RequestBody.create(null, entry.getValue()));
//          }
//      } 
//      // 第二部分
//      if (files != null) {
//          for (int i = 0; i < files.length; i++) {
//              File file = files[i];
//              String fileName = file.getName();
//
//              RequestBody requestBody = RequestBody.create(
//                      MediaType.parse(getMimeType(fileName)), file);
//              // 添加file inpurt 数据块
//              builder.addPart(
//                      Headers.of("Content-Disposition", "from-data;name=\""
//                              + formFileName[i] + "\";filenname=\""
//                              + fileName + "\""), requestBody);
//          }
//      } 
        return builder.build();
    }

    private static String getMimeType(String filename) {
        FileNameMap fileNameMap = URLConnection.getFileNameMap();
        String contentTypeFor = fileNameMap.getContentTypeFor(filename);
        if (contentTypeFor == null) {
            contentTypeFor = "application/octet-stream";
        }
        return contentTypeFor;
    }


    public static String File(String url,Map<String, Object> map){



        return url;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android中Okhttp框架进行网络请求的工具类()

package com.example.utils;import java.io.File; import java.io.IOException; import java.util.ArrayL...

简单的封装了一个OKHttp网络请求工具类,直接粘贴进去调用使用,很方便

谢谢您尊重他人的劳动成果: http://blog.csdn.net/w630886916/article/details/53431525简单的封装了一个OKHttp网络请求工具类,直接粘贴进去调...

网络请求工具类之OkHttp3封装(二)下(支持请求取消、异步请求的线程切换)

紧接着上篇说的任务2:异步请求采用UI线程回调方式。 首先采用Handler进行线程间的通信,顺便优化下回调方法,加入HttpInfo以做到工具类使用的渗透性。 在OkHttpUtil中声明一个自定义...

android使用okhttp进行网络请求

  • 2016年08月23日 18:34
  • 367KB
  • 下载

以OKHttp为基础封装网络请求工具类

特点: 1)支持SPDY协议,共享一个socket来处理同一个服务器的所有请求。 2)无缝支持GZIP,来减少数据流量。 3)缓存相应数据来减少重复的网络请求。   网络协议: SPDY(...

android 开发使用okhttp进行网络请求简单介绍(未测试)

HTTP POST 和 PUT 请求可以包含要提交的内容。只需要在创建 Request 对象时,通过 post 和 put 方法来指定要提交的内容即可。 HTTP...

Android网络请求OkHttp的使用demo代码

  • 2016年04月18日 17:50
  • 2.82MB
  • 下载

android发网络请求工具类

android上发起网络请求有很多实现方式,有很多的第三方框架如OKHttp、asynhttp、xutils、andbase等等,选择哪个其实影响不大。但平时经常见到有些开发在activity里直接使...

Android-async-http 网络请求框架(工具类)

import java.util.Map; import org.xutils.common.util.LogUtil; import com.loopj.android.http.AsyncHttp...

Android网络请求工具类

半个月前,让给公司一个新模块建个项目,到现在这个项目结构还是有很多不足的地方。比如说数据的本地缓存还有挺多的问题。今天后台服务器的接口崩的很厉害,完全取不到数据,任务里还有一个小模块的UI设计跟数据也...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中使用Okhttp进行网络请求的工具类(二)
举报原因:
原因补充:

(最多只允许输入30个字)