网络请求至retrofit,第一件事上依赖:错了,在依赖之前应该给网络权限,哈哈,脑子不够用
权限:
<uses-permission android:name="android.permission.INTERNET"/>
依赖:
retrofit依赖:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
okhttp依赖:
compile 'com.squareup.okhttp3:okhttp:3.5.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.2'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
接下来开始进入我们的主题。接口是利用。。。。代替,希望不会又什么影响
// 通过注解构建请求 public interface UserRetrofitApi { /** * Retrofit使用:需要创建一个接口,构建请求,通过Retrofit的Create方法 */ // Request request = new Request.Builder() // .url(url) // .get() // .build(); @GET("。。。。。。。。。。。。。。。。。。。。。") Call<ResponseBody> getData(@Query("q") String q, @Query("page") int page); @POST("。。。。。。。。。。。。。。。。。。。。。") Call<UserResult> register(@Body User user); /** * 注解: * 消息结构方面的注解 * 1. 请求方式:@GET @POST * 2. 请求路径:url 单独讲解 * 3. 请求头: * * @Headers({"Accept-Language:en","X-type:zxc","",""})添加头信息 * @Header("X-type")String type是在方法参数里面,动态修改添加的头信息 * 4. 请求体:@Body User body * @GET @POST @Headers @Header @Body * <p> * Url 处理方面注解 * 1. 可替换块:https://api.github.com/repos/{owner}/{repo} * @Path("owner")String owe * <p> * 2.查询参数:https://api.github.com/search/repositories?q=language:java&page=1 * get请求需要动态传入查询参数的时候 * @Query("q")String q * @QueryMap Map<String,String> map * <p> * 3. 整合:https://api.github.com/repos/{owner}/{repo}?q=language:java&page=1 * 可以一起使用,没有影响 * <p> * 4. 表单提交:POST https://api.github.com/search/repositories * 参数a ... * 参数b ... * @FormUrlEncoded * @Field("a") @FieldMap Map<> * <p> * 5. 多部分提交:@Multipart * @Part */ }
//调用注解框架,进行retrofi初始化
public class RetrofitNet { private static RetrofitNet mRetrofitNet; public final UserRetrofitApi mUserRetrofitApi; private RetrofitNet() { //拦截器 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(interceptor) .build(); // Retrofit初始化 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com")// Retrofit必须要添加的baseUrl .client(okHttpClient)// 给Retrofit设置OKHttpClient,暂时只是为了使用拦截器 .addConverterFactory(GsonConverterFactory.create())// 添加Gson转换器 .build(); // 实现接口请求 mUserRetrofitApi = retrofit.create(UserRetrofitApi.class); } public static synchronized RetrofitNet getInstance(){ if (mRetrofitNet==null){ mRetrofitNet = new RetrofitNet(); } return mRetrofitNet; }
}
====================================实体类
public class UserResult { /** * errcode : 1 * errmsg : 注册成功! * tokenid : 171 */ @SerializedName("errcode") private int code; private String errmsg; private int tokenid; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getErrmsg() { return errmsg; } public void setErrmsg(String errmsg) { this.errmsg = errmsg; } public int getTokenid() { return tokenid; } public void setTokenid(int tokenid) { this.tokenid = tokenid; } }
====================================================
get请求
public class RetrofitGetActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ok_http_get); ButterKnife.bind(this); } @OnClick(R.id.btn_get) public void onClick() { // 去执行请求 RetrofitNet.getInstance().mUserRetrofitApi.getData("language:java",1).enqueue(new Callback<ResponseBody>() { // 请求成功 @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { // 可以做UI的更新 Toast.makeText(RetrofitGetActivity.this, "onResponse:"+response.code(), Toast.LENGTH_SHORT).show(); } // 请求失败 @Override public void onFailure(Call<ResponseBody> call, Throwable t) { Toast.makeText(RetrofitGetActivity.this, "onFailure:"+t.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }
===================================================
post请求
public class RetrofitPostActivity extends AppCompatActivity { @BindView(R.id.et_name) EditText mEtName; @BindView(R.id.et_password) EditText mEtPassword; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ok_http_post); ButterKnife.bind(this); } @OnClick(R.id.btn_register) public void onClick() { // 去进行注册的请求 User user = new User(mEtName.getText().toString(), mEtPassword.getText().toString()); RetrofitNet.getInstance().mUserRetrofitApi.register(user).enqueue(new Callback<UserResult>() { @Override public void onResponse(Call<UserResult> call, Response<UserResult> response) { if (response.isSuccessful()) { UserResult userResult = response.body(); if (userResult != null) { Toast.makeText(RetrofitPostActivity.this, "请求成功" + userResult.getErrmsg(), Toast.LENGTH_SHORT).show(); } } } @Override public void onFailure(Call<UserResult> call, Throwable t) { Toast.makeText(RetrofitPostActivity.this, "请求失败", Toast.LENGTH_SHORT).show(); } }); } }