补上上次网络请求没写retrofit

本文详细介绍了如何使用Retrofit框架发起GET和POST网络请求,并展示了具体的代码实现过程,包括依赖配置、请求接口定义及响应处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//一些需要用到的依赖,
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
//retrofit依赖
compile 'com.squareup.retrofit2:retrofit:2.1.0'
//retrofit自带的一些解析
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.jakewharton:butterknife:8.4.0'
//截断器
compile 'com.squareup.okhttp3:logging-interceptor:3.4.2'
//gson依赖
compile 'com.google.code.gson:gson:2.8.0'
========================================================================================
正文:**************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();
            }
        });
    }
}
======================================================================
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 interface UserRetrofitApi {
    /**
     * Retrofit使用:需要创建一个接口,构建请求,通过Retrofit的Create方法
     */

//    Request request = new Request.Builder()
//            .url(url)
//            .get()
//            .build();
    @GET("https://api.github.com/search/repositories")
    Call<ResponseBody> getData(@Query("q") String q, @Query("page") int page);

    @POST("http://admin.syfeicuiedu.com/Handler/UserHandler.ashx?action=register")
    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
     */

    @Headers({"Accept-Language:en", "X-type:zxc", "", ""})
    @POST("")
    Call<ResponseBody> getA(@Header("X-type") String type, @Body User body);

    @GET("https://api.github.com/repos/{owner}/{repo}")
    Call<ResponseBody> getB(@Path("owner") String owner, @Path("repo") String repo);

    @GET("https://api.github.com/{search}/repositories")
    Call<ResponseBody> getC(@Path("search") String sear, @Query("q") String q, @Query("page") int page, @QueryMap Map<String, String> map);

    @FormUrlEncoded
    @POST("")
    Call<ResponseBody> getD(@Field("a") String a, @Field("b") String b, @FieldMap Map<String, String> map);

    @Multipart
    @POST("")
    Call<ResponseBody> getE(@Part("photo") RequestBody requestBody, @Part("username") String name);

    @POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=update")
    @Multipart
    Call<ResponseBody> getresult(@Part("user")Multsult user);
    @POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=register")
    @FormUrlEncoded
    Call<ResponseBody>  getformat(@Field("username")String name,@Field("password")String password);

}
==================================================================================
/ 通过注解构建请求
public interface UserRetrofitApi {
    /**
     * Retrofit使用:需要创建一个接口,构建请求,通过Retrofit的Create方法
     */

//    Request request = new Request.Builder()
//            .url(url)
//            .get()
//            .build();
    @GET("https://api.github.com/search/repositories")
    Call<ResponseBody> getData(@Query("q") String q, @Query("page") int page);

    @POST("http://admin.syfeicuiedu.com/Handler/UserHandler.ashx?action=register")
    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
     */

    @Headers({"Accept-Language:en", "X-type:zxc", "", ""})
    @POST("")
    Call<ResponseBody> getA(@Header("X-type") String type, @Body User body);

    @GET("https://api.github.com/repos/{owner}/{repo}")
    Call<ResponseBody> getB(@Path("owner") String owner, @Path("repo") String repo);

    @GET("https://api.github.com/{search}/repositories")
    Call<ResponseBody> getC(@Path("search") String sear, @Query("q") String q, @Query("page") int page, @QueryMap Map<String, String> map);

    @FormUrlEncoded
    @POST("")
    Call<ResponseBody> getD(@Field("a") String a, @Field("b") String b, @FieldMap Map<String, String> map);

    @Multipart
    @POST("")
    Call<ResponseBody> getE(@Part("photo") RequestBody requestBody, @Part("username") String name);

    @POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=update")
    @Multipart
    Call<ResponseBody> getresult(@Part("user")Multsult user);
    @POST("http://wx.feicuiedu.com:9094/yitao/UserWeb?method=register")
    @FormUrlEncoded
    Call<ResponseBody>  getformat(@Field("username")String name,@Field("password")String password);

}
=====================================================================================实体类
public class Multsult {
     String username;
    String password;

    public Multsult() {
    }

    public Multsult(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "Multsult{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
******************************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();
            }
        });

    }
}
========================================================================
实体类
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;
    }
}
==================================================================================
附上下载demo地址
链接:http://pan.baidu.com/s/1nvLXl3N 密码:bgs1
《C++编程实例100篇》是一本深入实践、极具价值的编程教程,它针对C++编程语言提供了丰富的实例,旨在帮助读者更好地理解和掌握C++的各项特性与编程技巧。这本书的经典之处在于它将理论与实践相结合,通过100个精心设计的编程实例,覆盖了C++的各个核心领域,包括基础语法、面向对象编程、模板、异常处理、STL(标准模板库)等。 我们来探讨C++的基础语法。C++是C语言的增强版,它保留了C语言的高效性和灵活性,并引入了类、对象和继承等面向对象编程概念。基础语法包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、函数的定义和调用等。在实例中,你可能会遇到如何编写简单的程序,如计算两个数的和,或者实现一个简单的猜数字游戏。 C++的面向对象编程是其一大特色。通过类和对象,你可以构建复杂的软件系统。类是对象的蓝图,它定义了对象的属性和行为。实例化一个类,就是创建一个具体的对象。继承允许你创建新的类,这些类从现有的类派生,共享其属性和方法,同时可以添加新的功能。多态性是面向对象的另一个关键特性,它使得不同类型的对象可以对同一消息作出不同的响应。这些概念在实例中会以各种形式展现,例如设计一个图形界面的类层次,或实现一个简单的模拟游戏。 接下来是模板,C++的模板功能让代码更加通用,可以处理不同类型的数据。模板分为函数模板和类模板,前者可以创建泛型函数,后者可以创建泛型类。通过模板,你可以编写出高效且灵活的代码,比如实现一个通用的排序算法。 异常处理是C++中用于处理程序运行时错误的机制。当程序出现异常情况时,可以抛出一个异常,然后在适当的点捕获并处理这个异常。这使得代码能够优雅地处理错误,而不是让程序崩溃。实例中可能会有涉及文件操作或网络通信时可能出现的异常处理示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值