Retrofit 使用实例

记录第一次使用retrofit,如有不对,请多多指教。
注意:Retrofit 中的baseurl必须以“/”结尾,否则出现错误。
1.下载支持retrofit的jar包

    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0'

2.定义请求接口

package request.http.com.httprequest.api;

import java.util.Map;
import okhttp3.RequestBody;
import request.http.com.httprequest.bean.goodsBean;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.HeaderMap;
import retrofit2.http.Headers;
import retrofit2.http.POST;


public interface RequestApi {
//Headers:固定请求头
    @Headers({
            "Content-Type: application/json;charset=UTF-8",
             "Accept: application/json",
    })
    // HeaderMap: 动态请求头  
    @POST("接口地址") //Post请求发送数据
    Call<goodsBean> getGroupGoods(@Body RequestBody info , @HeaderMap Map<String,String> headerParams );
 }

3.我这里是https请求所以添加了证书信任类

package request.http.com.httprequest.common;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


public class TrustAllCerts implements X509TrustManager {
    @Override
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }

    public static SSLSocketFactory createSSLSocketFactory() {
        SSLSocketFactory factory = null;
        try {
            SSLContext context = SSLContext.getInstance("TLS");
            context.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
            factory = context.getSocketFactory();
        } catch (Exception e) {
        }
        return factory;
    }

    public static class TrustAllHostnameVerifier implements HostnameVerifier {

        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
}

4.我这里封装了请求

package request.http.com.httprequest.common;

import com.google.gson.Gson;
import java.util.HashMap;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import request.http.com.httprequest.api.RequestApi;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class retrofitCommon {
    public   RequestApi  retrofitRequestPost(String url){
       //证书处理
        OkHttpClient.Builder    mBuilder = new OkHttpClient.Builder();
        mBuilder.sslSocketFactory(TrustAllCerts.createSSLSocketFactory());
        mBuilder.hostnameVerifier(new TrustAllCerts.TrustAllHostnameVerifier());
        OkHttpClient client = mBuilder.build();
        // Retrofit 
        Retrofit retrofit = new Retrofit.Builder()
         .addConverterFactory(GsonConverterFactory.create()) //添加Gson转换器
         .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加Rx转换器
         .baseUrl(url) //baseurl
             .client(client)
             .build();
        RequestApi requestApi = retrofit.create(RequestApi.class);
       return  requestApi;
    }
    //请求体
    public  RequestBody  getRequestBody(String param, String entity){
        Gson gson = new Gson();
        HashMap<String, String>  map = new HashMap<>();
        map.put(param, entity);
        String strEntity = gson.toJson(map);
        RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), strEntity);
         return  body;
    }
    //动态请求头
    public  HashMap<String,String>  getRequestParam(String param1, String param2){
        HashMap<String,String> hashMap = new HashMap<>();
        hashMap.put("Authorization", param1);
        hashMap.put("AppKey", param2);
        return  hashMap;
    }

}

5.根据接口返回数据定义bean

package request.http.com.httprequest.bean;

import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public  class  goodsBean implements Serializable {

    private goodsSuitBean goodsSuit;
    private ArrayList<singleBean> DataList;
    private TokenInfoBean TokenInfo;
    private String LanguageTypeId;
    private String Message;
    private String Status;

    public goodsBean() {
    }

    public goodsSuitBean  getGoodsSuit() {
        return goodsSuit;
    }

    public void setGoodsSuit(goodsSuitBean goodsSuit) {
        this.goodsSuit = goodsSuit;
    }

    public ArrayList<singleBean> getDataList() {
        return DataList;
    }

    public void setDataList(ArrayList<singleBean> dataList) {
        this.DataList = dataList;
    }

    public TokenInfoBean getTokenInfo() {
        return TokenInfo;
    }

    public void setTokenInfo(TokenInfoBean tokenInfo) {
        TokenInfo = tokenInfo;
    }

    public String getLanguageTypeId() {
        return LanguageTypeId;
    }

    public void setLanguageTypeId(String languageTypeId) {
        LanguageTypeId = languageTypeId;
    }

    public String getMessage() {
        return Message;
    }

    public void setMessage(String message) {
        Message = message;
    }

    public String getStatus() {
        return Status;
    }

    public void setStatus(String status) {
        Status = status;
    }



    @Override
    public String toString() {
        return "goodsBean{" +
                "goodsSuit=" + goodsSuit +
                ", dataList=" + DataList +
                ", TokenInfo=" + TokenInfo +
                ", LanguageTypeId='" + LanguageTypeId + '\'' +
                ", Message='" + Message + '\'' +
                ", Status='" + Status + '\'' +
                '}';
    }
}




package request.http.com.httprequest.bean;

import android.graphics.Bitmap;
import android.widget.ImageView;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;


public class singleBean implements Serializable {

    private String shop_id;
    private String goods_code;
    private String  goods_name;
    private double goods_price;
    private double goods_tax;
    private String goods_image;
    private double goods_poundage;

    public singleBean() {
    }

    public String getShop_id() {
        return shop_id;
    }

    public void setShop_id(String shop_id) {
        this.shop_id = shop_id;
    }

    public String getGoods_code() {
        return goods_code;
    }

    public void setGoods_code(String goods_code) {
        this.goods_code = goods_code;
    }

    public String getGoods_name() {
        return goods_name;
    }

    public void setGoods_name(String goods_name) {
        this.goods_name = goods_name;
    }

    public double getGoods_price() {
        return goods_price;
    }

    public void setGoods_price(double goods_price) {
        this.goods_price = goods_price;
    }

    public double getGoods_tax() {
        return goods_tax;
    }

    public void setGoods_tax(double goods_tax) {
        this.goods_tax = goods_tax;
    }

    public String getGoods_image() {
        return goods_image;
    }

    public void setGoods_image(String goods_image) {
        this.goods_image = goods_image;
    }

    public double getGoods_poundage() {
        return goods_poundage;
    }

    public void setGoods_poundage(double goods_poundage) {
        this.goods_poundage = goods_poundage;
    }

    @Override
    public String toString() {
        return "singleBean{" +
                "shop_id='" + shop_id + '\'' +
                ", goods_code='" + goods_code + '\'' +
                ", goods_name='" + goods_name + '\'' +
                ", goods_price=" + goods_price +
                ", goods_tax=" + goods_tax +
                ", goods_image='" + goods_image + '\'' +
                ", goods_poundage=" + goods_poundage +
                '}';
    }
}




package request.http.com.httprequest.bean;

import java.io.Serializable;


public class goodsSuitBean implements Serializable {
    private String goods_codes;
    private String goods_main_id;
    private String goods_packaged_image;
    private  String goods_packaged_name;
    private double goods_packaged_poundage;
    private double goods_packaged_price;
    private double goods_tax;
    private  String shop_id;

    public goodsSuitBean() {
    }

    public String getGoods_codes() {
        return goods_codes;
    }

    public void setGoods_codes(String goods_codes) {
        this.goods_codes = goods_codes;
    }

    public String getGoods_main_id() {
        return goods_main_id;
    }

    public void setGoods_main_id(String goods_main_id) {
        this.goods_main_id = goods_main_id;
    }

    public String getGoods_packaged_image() {
        return goods_packaged_image;
    }

    public void setGoods_packaged_image(String goods_packaged_image) {
        this.goods_packaged_image = goods_packaged_image;
    }

    public String getGoods_packaged_name() {
        return goods_packaged_name;
    }

    public void setGoods_packaged_name(String goods_packaged_name) {
        this.goods_packaged_name = goods_packaged_name;
    }

    public double getGoods_packaged_poundage() {
        return goods_packaged_poundage;
    }

    public void setGoods_packaged_poundage(double goods_packaged_poundage) {
        this.goods_packaged_poundage = goods_packaged_poundage;
    }

    public double getGoods_packaged_price() {
        return goods_packaged_price;
    }

    public void setGoods_packaged_price(double goods_packaged_price) {
        this.goods_packaged_price = goods_packaged_price;
    }

    public double getGoods_tax() {
        return goods_tax;
    }

    public void setGoods_tax(double goods_tax) {
        this.goods_tax = goods_tax;
    }

    public String getShop_id() {
        return shop_id;
    }

    public void setShop_id(String shop_id) {
        this.shop_id = shop_id;
    }

    @Override
    public String toString() {
        return "goodsSuitBean{" +
                "goods_codes='" + goods_codes + '\'' +
                ", goods_main_id='" + goods_main_id + '\'' +
                ", goods_packaged_image='" + goods_packaged_image + '\'' +
                ", goods_packaged_name='" + goods_packaged_name + '\'' +
                ", goods_packaged_poundage=" + goods_packaged_poundage +
                ", goods_packaged_price=" + goods_packaged_price +
                ", goods_tax=" + goods_tax +
                ", shop_id='" + shop_id + '\'' +
                '}';
    }
}



package request.http.com.httprequest.bean;

import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.Date;


public class TokenInfoBean implements Serializable {
    private long ExpirationTime;
    private  Boolean IsExpired;
    private  int LoginType;
    private String Token;
    private int UserId;
    private  String UserName;

    public TokenInfoBean() {
    }

    public long getExpirationTime() {
        return ExpirationTime;
    }

    public void setExpirationTime(long expirationTime) {
        ExpirationTime = expirationTime;
    }

    public Boolean getExpired() {
        return IsExpired;
    }

    public void setExpired(Boolean expired) {
        IsExpired = expired;
    }

    public int getLoginType() {
        return LoginType;
    }

    public void setLoginType(int loginType) {
        LoginType = loginType;
    }

    public String getToken() {
        return Token;
    }

    public void setToken(String token) {
        Token = token;
    }

    public int getUserId() {
        return UserId;
    }

    public void setUserId(int userId) {
        UserId = userId;
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    @Override
    public String toString() {
        return "TokenInfoBean{" +
                "ExpirationTime=" + ExpirationTime +
                ", IsExpired=" + IsExpired +
                ", LoginType=" + LoginType +
                ", Token='" + Token + '\'' +
                ", UserId=" + UserId +
                ", UserName='" + UserName + '\'' +
                '}';
    }
}

6.定义Adapter

package request.http.com.httprequest.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Base64;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import request.http.com.httprequest.R;
import request.http.com.httprequest.bean.goodsBean;
import request.http.com.httprequest.bean.singleBean;


public class RecyclerViewAdapter extends RecyclerView.Adapter{
    private ArrayList<singleBean> dataList;
    private Context mContext;
    private singleBean entity;
    public RecyclerViewAdapter(Context mContext, ArrayList<singleBean> goodsList) {
        this.dataList = goodsList;
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

         View view = LayoutInflater.from(mContext).inflate(R.layout.adapter_recyclerview, viewGroup , false);
         onItemClick(view);
        return new  ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        holder.itemView.setTag(position);
        entity = dataList.get(position);
        ((ViewHolder)holder).tv_goodsName.setText(entity.getGoods_name());
        ((ViewHolder)holder).tv_goodsPrice.setText(entity.getGoods_price()+ "");
        ((ViewHolder)holder).tv_goodsTax.setText(entity.getGoods_tax()+"");
        //图片使用的是base64
        ((ViewHolder)holder).iv_goodsImg.setImageBitmap(stringToBitmap(entity.getGoods_image()));
    }
    public  Bitmap stringToBitmap(String base64DataStr) {
        Bitmap bitmap = null;
        try {
            byte[] bitmapArray = Base64.decode(base64DataStr, Base64.DEFAULT);
            bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }
    @Override
    public int getItemCount() {
        return dataList.size();
    }
    public void  onItemClick(View view){
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
            }
        });
    }
    private  class  ViewHolder extends  RecyclerView.ViewHolder{

        private final ImageView iv_goodsImg;
        private final TextView tv_goodsName;
        private final TextView tv_goodsPrice;
        private final TextView tv_goodsTax;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            iv_goodsImg = (ImageView)itemView.findViewById(R.id.iv_goodsImg);
            tv_goodsName = (TextView)itemView.findViewById(R.id.tv_goodsName);
            tv_goodsPrice = (TextView)itemView.findViewById(R.id.tv_goodsPrice);
            tv_goodsTax = (TextView)itemView.findViewById(R.id.tv_goodsTax);
        }
    }
}


adapter_recyclerview.XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"

    >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
         android:orientation="vertical"
         android:padding="10dp"
        >
        <TextView
            android:id="@+id/tv_goodsName"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="0.8"
            android:text="鱼尾型晚礼服"
            android:gravity="center"
            android:textSize="20dp"
            android:textColor="@color/colorAccent"
            />
           <LinearLayout
               android:layout_width="match_parent"
               android:layout_height="0dp"
               android:layout_weight="2"
               android:orientation="horizontal"
               android:padding="5dp"
               >
               <ImageView
                   android:id="@+id/iv_goodsImg"
                   android:layout_width="0dp"
                   android:layout_height="match_parent"
                   android:layout_weight="1"
                   />
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="2"
                    android:orientation="vertical"
                    >
                    <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                    android:gravity="center_vertical"
                    >
                    <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="价格:"
                    android:textSize="20dp"
                     android:gravity="left|center"
                    />
                    <TextView
                    android:id="@+id/tv_goodsPrice"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="2"
                    android:text="2,000"
                    android:textSize="20dp"
                    android:gravity="left"
                    />
                    </LinearLayout>
                    <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:orientation="horizontal"
                   android:paddingLeft="8dp"
                    >
                    <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:text="税率:"
                    android:textSize="20dp"

                    />
                    <TextView
                    android:id="@+id/tv_goodsTax"
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="2"
                    android:text="0.08"
                    android:textSize="20dp"
                    android:gravity="left"
                    />
                    </LinearLayout>
                </LinearLayout>
           </LinearLayout>
    </LinearLayout>
</LinearLayout>


7.activity中使用

package request.http.com.httprequest.activity;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.widget.ImageView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import okhttp3.OkHttpClient;
import okhttp3.RequestBody;
import okhttp3.logging.HttpLoggingInterceptor;
import request.http.com.httprequest.R;
import request.http.com.httprequest.adapter.RecyclerViewAdapter;
import request.http.com.httprequest.api.RequestApi;
import request.http.com.httprequest.bean.TokenInfoBean;
import request.http.com.httprequest.bean.goodsBean;
import request.http.com.httprequest.bean.goodsSuitBean;
import request.http.com.httprequest.bean.singleBean;
import request.http.com.httprequest.common.CommonFunc;
import request.http.com.httprequest.common.Tools;
import request.http.com.httprequest.common.retrofitCommon;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

import java.util.ArrayList;
import java.util.HashMap;


public class MainActivity extends Activity {
    private Unbinder unbinder;
    @BindView(R.id.lv_showDetail)
    RecyclerView lv_showDetail;
    private ArrayList<singleBean> dataBeanList;
    private RecyclerViewAdapter adapter;
    private DefaultItemAnimator defaultItemAnimator;
    private RequestApi requestApi;
    private RequestBody body;
    private HashMap<String, String> hashMap;
    private   String authorizationCode;
    private  String appKey;
    private singleBean singleBean;
    private TokenInfoBean tokenInfoBean;
    private ArrayList<singleBean> singleList;
    private goodsSuitBean goodsSuitBean;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        unbinder = ButterKnife.bind(this);
        initView();

    }
    public void  initRecyclerView(){
        LinearLayoutManager manager = new LinearLayoutManager(this);
        lv_showDetail.setLayoutManager(manager);
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,    DividerItemDecoration.VERTICAL);
        dividerItemDecoration.setDrawable(getApplicationContext().getDrawable(R.drawable.rv_item_devider));
        lv_showDetail.addItemDecoration(dividerItemDecoration);
        adapter = new RecyclerViewAdapter(MainActivity.this, dataBeanList);
        lv_showDetail.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }
    public  void  initView() {
        retrofitCommon    retrofitCommon = new retrofitCommon();
        authorizationCode = CommonFunc.getBasicAuthorizationCode("user","asdasdsd");
        appKey = CommonFunc.getFinplexAppKey();
        requestApi=   retrofitCommon.retrofitRequestPost(“访问接口的地址”);
        body =  retrofitCommon.getRequestBody("code","1232131312");
        hashMap =  retrofitCommon.getRequestParam(authorizationCode,appKey);
        requestApi.getGroupGoods(body,hashMap).enqueue(new Callback<goodsBean>() {
            @Override
            public void onResponse(Call<goodsBean> call, Response<goodsBean> response) {
                callSuccessResponse(response);
            }
            @Override
            public void onFailure(Call<goodsBean> call, Throwable t) {
                callErrorResponse(t);
            }
        });
    }
    private  void callSuccessResponse( Response<goodsBean> response){
        dataBeanList = new ArrayList<>();
        goodsBean goods = response.body();
        goodsSuitBean = goods.getGoodsSuit();
        singleList = goods.getDataList();
        tokenInfoBean = goods.getTokenInfo();
        for (int i=0;i< singleList.size();i++){
             //处理需要显示的数据
        }
        initRecyclerView();
    }
    private  void callErrorResponse(Throwable t){
        Tools.i("error","error"+t.fillInStackTrace());
    }
    //去掉base64前缀
    public String removeBase64(String baseStr){
     String base64Str =   baseStr.substring(baseStr.indexOf(",")+1, baseStr.length());
    return  base64Str;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值