实体类ApiService

本文详细介绍了使用Retrofit框架进行网络请求的具体实现方法,包括GET和POST请求的处理,以及如何传递参数、处理响应等关键步骤。
package com.android.alex.retrofit_demo.di;

import java.util.Map;

import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * @author Alex
 * @date 2019/2/15.
 * GitHub:https://github.com/wangshuaialex
 */

//1.定义接口(封装URL地址和数据请求)
//子接口存放的内容
public interface ApiService {
    @GET("article/list/latest?page=1")
    Call<ResponseBody> getResponseData();

    @GET("article/list/latest?")
    Call<ResponseBody> getResponseDataWithQueryInfo(@Query("page") String info);

    @GET("article/list/latest?")
    Call<ResponseBody> getResponseDataWithQueryMapInfo(@QueryMap Map<String, String> map);

    @GET("article/list/{Alex}?")
    Call<ResponseBody> getResponseDataWithQueryMapInfoUpdatePath(@Path("Alex") String path, @QueryMap Map<String, String> map);

    @FormUrlEncoded
    @POST("small/user/v1/login")
    Call<ResponseBody> postResponseDataWithQueryInfo(@Field("phone") String phone, @Field("pwd") String pwd);
}

Activity

package com.android.alex.retrofit_demo.ui.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.alex.retrofit_demo.R;
import com.android.alex.retrofit_demo.data.Constant;
import com.android.alex.retrofit_demo.di.ApiService;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.btn_requestGetData)
    Button btnRequestGetData;
    @BindView(R.id.et_pageCount)
    EditText etPageCount;
    @BindView(R.id.btn_requestGetDataWithQueryInfo)
    Button btnRequestGetDataWithQueryInfo;
    @BindView(R.id.btn_requestGetDataWithQueryMapInfo)
    Button btnRequestGetDataWithQueryMapInfo;
    @BindView(R.id.tv_content)
    TextView tvContent;
    @BindView(R.id.btn_requestGetDataWithQueryMapInfoUpdatePath)
    Button btnRequestGetDataWithQueryMapInfoUpdatePath;
    @BindView(R.id.btn_requestPostDataWithQueryInfo)
    Button btnRequestPostDataWithQueryInfo;
    @BindView(R.id.et_userName)
    EditText etUserName;
    @BindView(R.id.et_pwd)
    EditText etPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }

    /**
     * 以最基本的形式,进行Get请求
     */
    private void requestGetData() {
        //2.实例化Retrofit
        //拼接根地址
        //可以获取到根地址
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .build();
        //3.通过Retrofit实例创建接口服务对象
        //+子地址
        ApiService service = retrofit.create(ApiService.class);
        //4.接口服务对象调用接口中的方法,获取Call对象
        Call<ResponseBody> call = service.getResponseData();
        //5.Call对象执行请求(异步、同步请求)
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    ResponseBody responseBody = response.body();
                    //响应数据
                    String responseData = responseBody.string();
                    tvContent.setText(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                String errorMessage = t.getMessage();
                tvContent.setText(errorMessage);
            }
        });
    }


    private void requestGetDataWithQueryInfo() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .build();
        ApiService service = retrofit.create(ApiService.class);
        //获取输入框的页数
        String pageCount = etPageCount.getText().toString();
        Call<ResponseBody> call = service.getResponseDataWithQueryInfo(pageCount);
        //执行请求
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    String reponseData = response.body().string();
                    tvContent.setText(reponseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                String errorMessage = t.getMessage();
                tvContent.setText(errorMessage);
            }
        });
    }

    private void requestGetDataWithQueryMapInfo() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .build();
        ApiService service = retrofit.create(ApiService.class);
        //创建所需键值对
        Map<String, String> map = new HashMap<>();
        //page=1
        //输入框所获取的信息内容
        String pageConut = etPageCount.getText().toString();
        map.put("page", pageConut);
        Call<ResponseBody> call = service.getResponseDataWithQueryMapInfo(map);
        //执行请求
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    String reposneData = response.body().string();
                    tvContent.setText(reposneData);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                tvContent.setText(t.getMessage());
            }
        });
    }


    private void requestGetDataWithQueryMapInfoUpdatePath() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.BASE_URL)
                .build();
        ApiService apiService = retrofit.create(ApiService.class);
        //所需键值对集合
        HashMap<String, String> map = new HashMap<>();
        String page = etPageCount.getText().toString();
        map.put("page", page);
        //所需内容路径
        Call<ResponseBody> call = apiService.getResponseDataWithQueryMapInfoUpdatePath("latest", map);
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    String responseData = response.body().string();
                    tvContent.setText(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                tvContent.setText(t.getMessage());
            }
        });

    }

    @OnClick({R.id.btn_requestGetData, R.id.btn_requestGetDataWithQueryInfo, R.id.btn_requestGetDataWithQueryMapInfo, R.id.btn_requestGetDataWithQueryMapInfoUpdatePath, R.id.btn_requestPostDataWithQueryInfo})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_requestGetData:
                //以最简单的Get方式进行请求
                requestGetData();
                break;
            case R.id.btn_requestGetDataWithQueryInfo:
                //以Get方式进行请求,需传入请求页数
                requestGetDataWithQueryInfo();
                break;
            case R.id.btn_requestGetDataWithQueryMapInfo:
                //以Get方式进行请求,需传入请求的键值对
                requestGetDataWithQueryMapInfo();
                break;
            case R.id.btn_requestGetDataWithQueryMapInfoUpdatePath:
                //以Get方式进行请求,需传入请求的键值对,以及传入文件夹路径
                requestGetDataWithQueryMapInfoUpdatePath();
                break;
            case R.id.btn_requestPostDataWithQueryInfo:
                requestPostDataWithQueryInfo();
                break;
        }
    }

    private void requestPostDataWithQueryInfo() {
        //根地址改动
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Constant.MALL_BASE_URL)
                .build();
        ApiService service = retrofit.create(ApiService.class);
        //添加用户名、密码
        String userName = etUserName.getText().toString();
        String pwd = etPwd.getText().toString();
        //添加到请求参数中
        Call<ResponseBody> call = service.postResponseDataWithQueryInfo(userName,pwd);
        //执行请求
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    String responseData = response.body().string();
                    tvContent.setText(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                tvContent.setText(t.getMessage());
            }
        });
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值