okhttp 常用使用方式 封装 演示

Posted 白乾涛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了okhttp 常用使用方式 封装 演示相关的知识,希望对你有一定的参考价值。


工具介绍
使用:
  • androidStudio:【compile \'com.squareup.okhttp3:okhttp:3.4.2\'】和【compile \'com.zhy:okhttputils:2.6.2\'】和【compile \'com.google.code.gson:gson:2.3.1\'】
  • eclipse:添加okthttp、okio、gson的jar包,复制okhttputils的源码到项目中

封装的功能
  • 一般的get请求
  • 一般的post请求
  • 基于Http Post的文件上传(类似表单)
  • 文件下载/加载图片
  • 上传下载的进度回调
  • 支持取消某个请求
  • 支持自定义Callback
  • 支持HEAD、DELETE、PATCH、PUT
  • 支持session的保持
  • 支持自签名网站https的访问,提供方法设置下证书就行
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
android:name="com.bqt.okhttp.MyApplication"

Application
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //对于Https,框架中提供了一个类HttpsUtils,可设置为:可访问所有的https网站、设置具体的证书、双向认证
        //同样的,框架中只是提供了几个实现类,你可以自行实现SSLSocketFactory,传入sslSocketFactory方法中即可
        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(nullnullnull);
        //对于cookie,直接通过cookiejar方法配置,当然也可以自己实现CookieJar接口,编写cookie管理相关代码。
        //对于持久化cookie,还可以使用https://github.com/franmontiel/PersistentCookieJar.相当于框架中只是提供了几个实现类,你可以自行定制或者选择使用
        //        ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(getApplicationContext()));
        //     CookieJarImpl cookieJar = new CookieJarImpl(new MemoryCookieStore());
        OkHttpClient okHttpClient = new OkHttpClient.Builder()//
                .connectTimeout(10000L, TimeUnit.MILLISECONDS)//
                .readTimeout(10000L, TimeUnit.MILLISECONDS)//
                //对于Log,初始化OkhttpClient时,通过设置拦截器实现,框架中提供了一个LoggerInterceptor,当然你可以自行实现一个Interceptor 
                .addInterceptor(new LoggerInterceptor("TAG"))//
                //                .cookieJar(cookieJar)
                .hostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String hostname, SSLSession session) {
                        return true;
                    }
                })//
                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)//
                .build();
        //默认情况下,将直接使用okhttp默认的配置生成OkhttpClient,如果有任何配置,记得在Application中调用initClient方法进行设置。
        OkHttpUtils.initClient(okHttpClient);
    }
}

MainActivity

public class MainActivity extends ListActivity {
    private User mUser;
    private String user = "103468";
    private String pass = "103468";
    private String session_id;
    private String uid;
    private String mBaseUrl = "http://tapi.95xiu.com/";
    private TextView mTv;
    private ImageView mImageView;
    private ProgressBar mProgressBar;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        String[] array = { "post方式提交键值对数据""get方式提交键值对数据""post方式提交键值对数据文件""post方式提交文件",//
                "post方式提交Json数据""get方式获取图片""get方式下载文件""清除Session"};
        for (int i = 0; i < array.length; i++) {
            array[i] = i + "、" + array[i];
        }
        mTv = new TextView(this);// 将内容显示在TextView中
        mTv.setTextColor(Color.BLUE);
        mTv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
        mTv.setPadding(20, 10, 20, 10);
        mImageView = new ImageView(this);
        mProgressBar = new ProgressBar(this);
        mProgressBar = new ProgressBar(thisnull, android.R.attr.progressBarStyleHorizontal);
        mProgressBar.setMax(100);
        getListView().addFooterView(mProgressBar);
        getListView().addFooterView(mTv);
        getListView().addFooterView(mImageView);
        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1new ArrayList<String>(Arrays.asList(array))));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        switch (position) {
        case 0:
            postWithParams()//post方式提交键值对数据
            break;
        case 1:
            getWithParams()//get方式提交键值对数据
            break;
        case 2:
            postParamsAndFile()//post方式提交键值对数据,同时提交文件
            break;
        case 3:
            postFile();//post方式提交文件---------------------用不到
            break;
        case 4:
            postJson();//post方式提交Json数据
            break;
        case 5:
            getImage();//get方式获取图片
            break;
        case 6:
            downloadFile();//get方式下载文件
            break;
        case 7:
            clearSession();//清除Session
            break;
        }
    }

    //post方式提交键值对数据
    public void postWithParams() {
        String url = mBaseUrl + "user/loginv2.php";
        OkHttpUtils.post().url(url).addParams("user"user).addParams("pass"pass).build().execute(new StringCallback() {
            @Override
            public void onBefore(Request request, int id) {
                mTv.setText("onBefore...\\n\\n");
            }
            @Override
            public void onAfter(int id) {
                mTv.append("onAfter...");
            }
            @Override
            public void onError(Call call, Exception e, int id) {
                e.printStackTrace();
                mTv.append("onError:" + e.getMessage() + "\\n\\n");
            }
            @Override
            public void onResponse(String response, int id) {
                mTv.append(response + "\\n\\n");
                Log.i("bqt", response);
                mUser = new Gson().fromJson(response, User.class);
                uid = mUser.getMsg().getId();
                session_id = mUser.getMsg().getSession_id();
            }
        });
    }
    //get方式提交键值对数据
    public void getWithParams() {
        String url = mBaseUrl + "app/news/index.php";
        OkHttpUtils.get().url(url).id(100).addParams("session_id"session_id).addParams("uid"uid).build().execute(new MyStringCallback());
    }
    //post方式提交键值对数据,同时提交文件
    public void postParamsAndFile() {
        String url = mBaseUrl + "myprofile/editinfo.php";
        File file = new File(Environment.getExternalStorageDirector

以上是关于okhttp 常用使用方式 封装 演示的主要内容,如果未能解决你的问题,请参考以下文章

okhttputils Android 一个改善的okHttp封装库使用

Android实战——okhttp3的使用和封装

okhttp的简介之简单封装

常用Javascript代码片段集锦

okHttp的二次封装

# Java 常用代码片段