Retrofit

compile ‘com.squareup.retrofit2:converter-gson:2.0.0-beta4’

单例模式
private static OkHttpClient okHttpClient = null;

    public  static OkHttpClient getOkHttpSingletonInstance() {
        if (okHttpClient == null) {
            synchronized (OkHttpClient.class) {
                if (okHttpClient == null) {
                    okHttpClient = new OkHttpClient();
                }
            }
        }
        return okHttpClient;
    }
先把单例模式调出来
OkHttpClient client = OkHttp3Utils.getOkHttpSingletonInstance();

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.URL_BASE)
                //注意:这里就是Retrofit2自动使用Gson解析json数据的方法
                .addConverterFactory(GsonConverterFactory.create())
                //E.注意:这两段代码是Picasso和Retrofit配合使用的逻辑,一开始不用写
                .client(client)
                .build();
                
       MyServerInterface serverInterface = retrofit.create(MyServerInterface.class);

        //GET网络访问,调用多参方法:
        Call<QiushiModel> call_qiushi = serverInterface.getInfoList("latest", 1);
        //call_qiushi = serverInterface.getInfoList(String.format(Constant.URL_LATEST, 1));
        call_qiushi.enqueue(new Callback<QiushiModel>() {
            @Override//成功回调的方法
            public void onResponse(Call<QiushiModel> call, Response<QiushiModel> response) {
                if (response.isSuccess() && response.body() != null) {
                    //让进度条消失
                    progressBar_main.setVisibility(View.GONE);
                    //泛型中指定了bean类,数据成功后,可以直接调用bean类的方法,因为数据已经解析好了
                    List<QiushiModel.ItemsEntity> list = response.body().getItems();
                    // adapter执行刷新ListView
                    adapter.reloadData(list, true);
                }
            }

            @Override   //失败回调的方法
            public void onFailure(Call<QiushiModel> call, Throwable t) {
                progressBar_main.setVisibility(View.GONE);
                Toast.makeText(mContext, "网络异常,加载失败!", Toast.LENGTH_SHORT).show();
            }
        });

Retrofit @GET

/**
     * A.
     * GET请求,指定Path参数和Query参数
     * 其中注解中的变量用{ 变量名自定义 } 在方法参数中
     * 格式:@Path("上面定义的变量名") 类型 定义的变量名  作用:替换url地址中"{"和"}"所包括的部分
     * 格式:@Query("参数名") 类型 定义的参数名 作用:会拼接在URL的最后部分,类似追加了"page = 1"的字符串,形成提交给服务器端的请求参数
     */
    @GET("article/list/{type}?")
    Call<QiushiModel> getInfoList(@Path("type") String type, @Query("page") int page);

    /**
     * GET请求提交表单数据,方法中定义@QueryMap参数
     * @QueryMap参数将在url地址中追加类似"type = text & count = 30 & page = 1 " 的字符串
     */
    @GET("web/LoginServlet")
    Call<ResponseBody> getRegInfo(@QueryMap Map<String, String> map);

    /**
     * 作用:访问网络,获取网络返回数据,动态的URL地址
     * 在注解中不指定URL地址,代码中指定网址会忽略默认网址,使用指定的网址
     * @return
     */
    @GET
    Call<ResponseBody> getNetworkData(@Url String urlString);

    /**
     * Get请求,方法中无参数,但在@Url里定义完整URL路径,这种情况下BaseUrl会被忽略
     * 作用:访问网络,获取网络返回数据,上面和下面效果是一样的,静态的URL地址
     */
    @GET("http://img.265g.com/userup/1201/201201071126534773.jpg")
    Call<ResponseBody> getNetworkData();

    /**
     * 作用:访问网络,下载大文件。
     * 默认情况下,Retrofit在处理结果前会将服务器端的Response结果全部读进内存中,如果服务器端返回的是一个非常大的文件,会报oom。
     * 解决就用IO流进行读写操作,因为大文件下载是边下载,边保存,所以Retrofit2下载文件的逻辑要放到子线程
     * @return
     */
    @Streaming
    @GET
    Call<ResponseBody> getNetworkDataAsync(@Url String urlString);

@POST

// POST网络请求方式//
    /**Post上传表单第一种使用的抽象方法:方法中定义@Field参数,分别指定各个表单参数
     * 作用:post网络请求,向服务器提交表单域数据
     * @FormUrlEncoded:解决编码乱码问题,
     *
     */
    @FormUrlEncoded
    @POST("web/LoginServlet")
    Call<ResponseBody> postFormFields(@Field("username") String username,@Field("password") String password);
    /**Post上传表单第二种使用的抽象方法:方法中定义@FieldMap参数,@FieldMap集合中指定各个表单参数
     * 作用:post网络请求,向服务器提交表单域数据
     * @FormUrlEncoded:解决编码乱码问题,
     */
    @FormUrlEncoded
    @POST("web/LoginServlet")
    Call<ResponseBody> postFormFieldMap(@FieldMap Map<String , String> map);


    /**
     * 作用:POST网络请求,上传单个文件,上传后的文件名称已经被参数指定
     * 上传单个文件,必须加上 @Multipart 注解
     */
    @Multipart
    @POST("web/UploadServlet")
    Call<ResponseBody> postUploadFile(@Part("uploadfile\";filename=\"myuploadimg.png") RequestBody requestBody);
    /**
     * 作用:POST网络请求,上传多个文件,同时上传表单域数据
     * 上传多个文件不能加太多注解
     */
    @POST("web/UploadServlet")
    Call<ResponseBody> postUploadFilesMultipartBody(@Body MultipartBody multipartBody);

记得释放内存

call.cancel();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值