• Android学习-网络编程



    前言

    本博客仅做学习笔记,如有侵权,联系后即刻更改

    科普:


    使用步骤

    1. gradle文件引入依赖

    //网络数据申请
        implementation("com.squareup.okhttp3:okhttp:4.9.3")
        implementation'com.squareup.retrofit2:retrofit:2.9.0'
        implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
        //RetrofitUtils
        implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
        annotationProcessor 'androidx.room:room-compiler:2.3.0'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 引入网络请求拦截器文件

    import android.util.Log;
    
    import okhttp3.OkHttpClient;
    import okhttp3.logging.HttpLoggingInterceptor;
    import retrofit2.Retrofit;
    import retrofit2.converter.gson.GsonConverterFactory;
    
    public class RetrofitUtils {
    
        public static Retrofit getRetrofit(String url) {
            //日志显示级别
            HttpLoggingInterceptor.Level level= HttpLoggingInterceptor.Level.BODY;
            //新建log拦截器
            HttpLoggingInterceptor loggingInterceptor=new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
                @Override
                public void log(String message) {
                    Log.d("RetrofitMessage","OkHttp====Message:"+message);
                }
            });
            loggingInterceptor.setLevel(level);
            //定制OkHttp
            OkHttpClient.Builder httpClientBuilder = new OkHttpClient
                    .Builder();
            //OkHttp进行添加拦截器loggingInterceptor
            httpClientBuilder.addInterceptor(loggingInterceptor);
    
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(url)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client( httpClientBuilder.build())
                    .build();
    
            return retrofit;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3. 新建一个Api.java文件,引入对应Api

    import com.hnucm.coursedesign.Type.TypeHistory;
    import com.hnucm.coursedesign.Type.TypeMusic;
    import com.hnucm.coursedesign.Type.TypeNews;
    import com.hnucm.coursedesign.Type.TypePoetry;
    import com.hnucm.coursedesign.Type.TypeSearchNews;
    import com.hnucm.coursedesign.Type.TypeVideos;
    import com.hnucm.coursedesign.Type.TypeWeatherResponse;
    
    import retrofit2.Call;
    import retrofit2.http.GET;
    import retrofit2.http.Header;
    import retrofit2.http.Query;
    
    public interface Api {
        //   https://api.asilu.com/today
        @GET("today")
        Call<TypeHistory> getHistory();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    4. 创建一个类,与网络请求api的格式一致

    import java.util.List;
    
    public class TypeHistory {
    
        public int code;
        public String month;
        public String day;
        public List<DataDTO> data;
    
        public static class DataDTO {
            public int year;
            public String title;
            public String link;
            public String type;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    5. Java文件创建api实例

    //          加载历史上的今天的API资源
            Api api = RetrofitUtils.getRetrofit("https://api.asilu.com").create(Api.class);
            Call<TypeHistory> historyCall = api.getHistory();
            historyCall.enqueue(new Callback<TypeHistory>() {
                @Override
                public void onResponse(Call<TypeHistory> call, Response<TypeHistory> response) {
                    TypeHistory typeHistory = response.body();
                    myAdapter2 = new MyAdapter();
                    recyclerView.setAdapter(myAdapter2);
                    num = typeHistory.data.size();
                    for (int i=0; i < num; i++){
                        year_list.add(typeHistory.data.get(i).year);
                        title_list.add(typeHistory.data.get(i).title);
                        historyUrl_list.add(typeHistory.data.get(i).link);
                    }
                    myAdapter2.notifyDataSetChanged();
    
                }
    
                @Override
                public void onFailure(Call<TypeHistory> call, Throwable t) {
    
                }
            });
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    总结

    小小励志

    有些事你现在不做,一辈子都不会做了。
    如果你想做一件事,全世界都会为你让路。
    《搭车去柏林》

  • 相关阅读:
    掌握Maven和SpringBoot的灵活性:定制化lib目录和依赖范围
    Spring Boot 整合 Camunda 实现工作流
    leetcode经典面试150题---5.多数元素
    HTTP协议详解
    带你着手「Servlet」
    kaggle机器学习baselines
    Java的数据类型
    若依 ruoyi 分离版 vue 简单的行内编辑实现
    macOS下如何使用Flask进行开发
    某客户管理系统Oracle RAC节点异常重启问题详细分析记录
  • 原文地址:https://blog.csdn.net/qq_51922077/article/details/126258991