1. Http请求模块,Volley+OkHttp。(获取数据,发送数据)

概述步骤

a. 添加Volley库,并封装Volley为单例模式。

b. 使用OkHttp实现 基于 com.android.volley.toolbox.HttpStack 这个借口的OkHttpStack。

c. 其中使用 com.franmontiel.persistentcookiejar 实现本地持久化Cookies。

d. 因为使用Aliyun OSS 作为图片服务器,所以需要用到 Multipart Request (Volley 没有提供) 所以 继承 com.android.volley.Request 实现Multipart Request。

e.Request Samples.

顺序从B->C->A->D这个顺序

Part B 实现OkHttpStack

先引用一段代码->Github完整代码-> OkHttpStack.java

Part C 本地Cookies持久化部分

精选部分OkHttpStack.java代码,添加本地Cookies持久化部分,这里涉及到一个开源库-PersistentCookieJar(自己封装一个也很简单,参考这个开源库即可,也可用Sqlite来实现,只要显现了ClearableCookieJar的接口即可)

ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(mContext));
OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
builder.connectTimeout(timeoutMs, TimeUnit.MILLISECONDS)
       .readTimeout(timeoutMs, TimeUnit.MILLISECONDS)
       .writeTimeout(timeoutMs,TimeUnit.MILLISECONDS).cookieJar(cookieJar);

也没有太多可以赘述的地方。

Part A 添加Volley库+ 实现Volley 单例模式

下载Volley,然后用Android Studio 添加Module (Google 一下,无须赘述)
接着在build.gradle module 级别里添加
compile project(":volley")
setting.gradle 里 添加(修改成) app是博主module的名字,关键是吧:volley 添加进去
include ':app', ':volley'

接下来实现Volley的单例模式(Java Singleton)
MyVolleySingleton.java
抽出部分来说
里面有个ImageLoader部分,如果使用Picasso可以忽略这个部分。

Part D 封装Multipart Request

博主参考了一个封装,修改了body部分
MultipartRequest.java

大体至此,Http请求模块的配置就结束了,最后用一个Sample结尾。
博主这里是把StringRequest 封装成了静态函数,因为使用RestFul Server,因此需要用METHOD.PUT。 接着使用Fastjson转化Object 到JSON。

        MyVolleySingleton.getInstance(getBaseContext()).addToRequestQueue(
               RequestPutFactory.putAtv(com.alibaba.fastjson.JSON.toJSONString(putAtvModel), new RequestCallback() {
                    @Override
                    public void successCallback(String response) {
                        action_publish.setText("创建完成");
                        Atv atv=com.alibaba.fastjson.JSON.parseObject(response,Atv.class);
                        Intent newIntent=new Intent(getBaseContext(),ScrollingAtvActivity.class);
                        newIntent.putExtra("activity_id",atv.getActivity_id());
                        startActivity(newIntent);
                    }
                    @Override
                    public void failCallback(VolleyError error){

                    }

                    @Override
                    public void processCallback() {

                    }
                })
        );

下面是对RequestPutFactory的摘要。

public static StringRequest putAtv(final String json, final RequestCallback reqCallback){
        return putRequestGenerater("/atv",json,reqCallback);
    }

函数putRequestGenerater全部代码。

public static StringRequest putRequestGenerater(final String url_part,final String json, final RequestCallback reqCallback){
        StringRequest stringRequest =new StringRequest(Request.Method.PUT,end_point+url_part, new Response.Listener() {
            @Override
            public void onResponse(String response) {
                reqCallback.successCallback(response);
            }
        },new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(VolleyError error) {
                // error
                error.printStackTrace();
                reqCallback.failCallback(error);
            }
        }){
            @Override
            public byte[] getBody() throws AuthFailureError{
                try {
                    return json.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return null;
                }
            }
            @Override
            public String getBodyContentType() {
                return "application/json; charset=" + getParamsEncoding();
            }
            @Override
            public Map getHeaders() throws AuthFailureError {
                Map params = new HashMap();
                params.put("Content-Type","application/json");
                return params;
            }
        };
        return stringRequest;
    }

到此基本上对于Android与服务器进行交互问题就不大了。
图片上传问题后面再谈。

你可能感兴趣的:(1. Http请求模块,Volley+OkHttp。(获取数据,发送数据))