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) { } }); } }