android studio 30天学习笔记-day 6-介绍retrofit(二)

今天要来了解上一篇的各个步骤

1.创建资料类别
有个快速生成data class的插件,可以从File->setting->Plugins->搜寻GsonFormat并install,install完後重启Android Studio

https://ithelp.ithome.com.tw/upload/images/20210712/201389667YHLgHgvtQ.png

创个新的class,右键 Generate->Gsonformat,把gson资料贴上去
https://ithelp.ithome.com.tw/upload/images/20210712/20138966jWtKoe1yDy.png
按下ok後,可以修改其资料型态、变数
https://ithelp.ithome.com.tw/upload/images/20210712/20138966rmHm1EnlA3.png
按下ok後,会生成对应的data class

public class Datamm {

    /**
     * userId : 1
     * id : 1
     * title : sunt aut facere repellat provident occaecati excepturi optio reprehenderit
     * body : quia et suscipit
     suscipit recusandae consequuntur expedita et cum
     reprehenderit molestiae ut ut quas totam
     nostrum rerum est autem sunt rem eveniet architecto
     */

    private int userId;
    private int id;
    private String title;
    private String body;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}

当然也可以自己手打啦,首先设定对应gson格式的data

public class Datamm {
    private int userId;
    private int id;
    private String title;
    private String body;
}

然後按右键Generate->getter and setter,全部选取後按下Ok,也会出现跟上面一样的data class
https://ithelp.ithome.com.tw/upload/images/20210712/20138966VbM4HimoNJ.png

建立retrofit

Retrofit retrofit=new Retrofit.Builder() 
                .baseUrl("https://jsonplaceholder.typicode.com/") //连接你要的uri
                .addConverterFactory(GsonConverterFactory.create()) //gson解析
                .build();

interface
@GET

    @GET("posts")
    Call<DataItem> getPosts();  
    
    @GET("posts/{id}") //可以用@Path将新的参数带入{}
    Call<DataItem> getPosts(@Path("id") int id);  

@POST

    @POST("posts") // @Body表示要传送Body资料
    Call<DataItem> getPosts(@Body Posts posts);

@PUT

    @PUT("posts")
    Call<DataItem> getPosts();  

@DELETE

    @DELETE("posts")
    Call<DataItem> getPosts();  

最後使用enqueue进行异步操作的请求

 ApiGet apiGet =retrofit.create(ApiGet.class);
        Call<DataItem> call =apiGet.getPosts(); //呼叫call连线服务
        
        call.enqueue(new Callback<DataItem>() { //透过 Callback 来等待回传成功或失败的资料
            @Override
            public void onResponse(Call<DataItem> call, Response<DataItem> response) {
                Log.d("API", "id: " + response.body().getId());
                Log.d("API", "User Id: " + response.body().getUserId());
                Log.d("API", "Title: " + response.body().getTitle());
                Log.d("API", "Text: " + response.body().getText());
            }

            @Override
            public void onFailure(Call<DataItem> call, Throwable t) {
                Log.d("API", "fail");
            }
        });

这样就完成了


<<:  Day-9 在Hazard寻求解法是否搞错了什麽

>>:  Day 21 - GitOps 解决方案比较

Day29- 这是替身攻击!! 替换你的pod Telepresence

在前面我们介绍到了各种建立以及产生pod的方式,但是当你已经建构好一个系统後,写好的程序要更新以及测...

[Day 18] 来看看v-pre、v-cloak、v-once呗

嗨嗨大家今天过得好吗?我今天成功煎了一颗蛋。今天的篇幅虽然看似有点短,但是里面的内容却是崭新且重要的...

响应式网站注意细节-30天学会HTML+CSS,制作精美网站

现在使用智慧型手机比率最高,手机画面很小,所以在制作网页时应注意以下细节 只显示重要的资讯及减少栏位...

[Day2] 断词介绍

一. 为何需要断词 最主要的原因就是中文的最小一个单位就是一个词,通常不能直接喂一个句子给你的语言模...

[Day 5] Leetcode 322. Coin Change (C++)

前言 天啊今天整个非常赶,23:00到家打开发现今天是hard的题目(446. Arithmetic...