retrofit的使用

1.上传文件的bean类

package com.example.retrofitdemo.bean;

/**
 * Created by Dash on 2018/2/22.
 */
public class UpLoadPicBean {

    /**
     * msg : 文件上传成功
     * code : 0
     */

    private String msg;
    private String code;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }
}

2.用于对网络请求的描述LoginApiService

package com.example.retrofitdemo;

import com.example.retrofitdemo.bean.UpLoadPicBean;
import com.example.retrofitdemo.bean.UserBean;

import java.util.Map;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * 用于对网络请求的描述
 */
public interface LoginApService {

    @FormUrlEncoded
    @POST("user/login")
    Call<UserBean> login(@Field("mobile") String mobile, @Field("password") String password);

    @FormUrlEncoded
    @POST("user/login")
    Call<UserBean> login2(@FieldMap Map<String, String> params);


    @GET("user/login?mobile=18310830365&password=123456")
    Call<UserBean> login3();

    @GET("user/login")
    Call<UserBean> login4(@Query("mobile") String mobile, @Query("password") String password);

    @GET("user/login")
    Call<UserBean> login5(@QueryMap Map<String, String> params);

    @GET("user/{path}")
    Call<UserBean> login6(@Path("path") String path, @QueryMap Map<String, String> params);

    @Multipart
    @POST("file/upload")
    Call<UpLoadPicBean> uploadImg(@Part("uid") RequestBody uid, @Part MultipartBody.Part file);
}

3.网络请求

package com.example.retrofitdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.retrofitdemo.bean.UpLoadPicBean;
import com.example.retrofitdemo.bean.UserBean;

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

import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
    String imgUrl;
    private File file;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgUrl = getExternalCacheDir().getPath() + "/" + "header.jpg";
        file = new File(imgUrl);
        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        //创建 Retrofit 实例
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://www.zhaoapi.cn/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        //创建网络请求接口实例
        LoginApService loginApService = retrofit.create(LoginApService.class);
        /********************************POST第一种用请求***********************************************/
//        Call<UserBean> call = loginApService.login("18310830365", "123456");
        /*******************************************************************************/

        /********************************POST第二种用请求***********************************************/
//        Map<String, String> params = new HashMap<>();
//        params.put("mobile", "18310830365");
//        params.put("password", "123456");
//        Call<UserBean> call = loginApService.login2(params);
        /*******************************************************************************/

        /********************************GET第一种用请求***********************************************/
        // Call<UserBean> call = loginApService.login3();
        /*******************************************************************************/


        /********************************GET第二种用请求***********************************************/
        //Call<UserBean> call = loginApService.login4("18310830365","123456");
        /*******************************************************************************/

        /********************************GET第三种用请求***********************************************/
//        Map<String, String> params = new HashMap<>();
//        params.put("mobile", "18310830365");
//        params.put("password", "123456");
//        Call<UserBean> call = loginApService.login5(params);
        /*******************************************************************************/

        /********************************动态设置路局***********************************************/
        Map<String, String> params = new HashMap<>();
        params.put("mobile", "18310830365");
        params.put("password", "123456");
        Call<UserBean> call = loginApService.login6("login", params);
        /*******************************************************************************/

        //发送网络请求(异步 / 同步)
        call.enqueue(new Callback<UserBean>() {
            @Override
            public void onResponse(Call<UserBean> call, Response<UserBean> response) {
                UserBean userBean = response.body();
            }

            @Override
            public void onFailure(Call<UserBean> call, Throwable t) {

            }
        });
//        uploadImg();
    }


    private void uploadImg() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://www.zhaoapi.cn/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        LoginApService loginApService = retrofit.create(LoginApService.class);
        MediaType textType = MediaType.parse("text/plain");
        RequestBody uid = RequestBody.create(textType, "1235");
        RequestBody file = RequestBody.create(MediaType.parse("application/octet-stream"), this.file);
        MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", "header.jpg", file);
        Call<UpLoadPicBean> call = loginApService.uploadImg(uid, filePart);
       call.enqueue(new Callback<UpLoadPicBean>() {
           @Override
           public void onResponse(Call<UpLoadPicBean> call, Response<UpLoadPicBean> response) {
               UpLoadPicBean upLoadPicBean = response.body();
           }

           @Override
           public void onFailure(Call<UpLoadPicBean> call, Throwable t) {

           }
       });
    }
}

猜你喜欢

转载自blog.csdn.net/sui_yz/article/details/80308745