retrofit好久没用,基本忘得差不多了,瞎写一通

网络请求至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();
            }
        });

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值