Retrofit异步请求数据 (两种接口路径 ?,/)

本文介绍了如何使用Retrofit进行异步数据请求,重点讲解了两种不同的接口路径,包括使用问号(?)和斜线(/)的区别,并提供了依赖配置和接口定义的相关步骤。

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

    1依赖:

compile 'org.greenrobot:greendao:3.2.2'
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
compile 'com.squareup.okhttp3:okhttp:3.10.0'
compile 'com.google.code.gson:gson:2.2.4'
    2权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
3.主布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.retrofitdemo0413.MainActivity">

    <TextView
        android:id="@+id/text_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
    <Button
        android:id="@+id/btn_dianji"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Retrofit?路径请求数据"/>
    <Button
        android:id="@+id/btn_dianji2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Retrofit/路径请求数据"/>

</LinearLayout>

4.定义接口

package com.example.retrofitdemo0413;

import java.util.List;
import java.util.Map;
import retrofit2.http.GET;
import retrofit2.Call;
import retrofit2.http.Path;
import retrofit2.http.QueryMap;

//1.声明一个接口
    public interface ApiService {
        //2.声明一个接口对象 路径""
    @GET("user/getUserInfo")
    Call<MessageBean<InfoBean>> getInfo(@QueryMap Map<String,String> params);

    //3.声明一个借口对象 路径“/”
    @GET("search/query/listview/category/Android/count/{count}/page/{page}")
    Call<NewsBean<List<News>>> getNews(@Path("count") String count,@Path("page") String page);
}
5.Acivity的实现

package com.example.retrofitdemo0413;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.text_show)
    TextView textShow;
    @BindView(R.id.btn_dianji)
    Button btn_dj;
    @BindView(R.id.btn_dianji2)
    Button btn_Dianji2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
    }
    
    //点击事件
    @OnClick({R.id.btn_dianji, R.id.btn_dianji2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_dianji:

                Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("https://www.zhaoapi.cn/user/")
                        //添加Gson自动解析
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                ApiService service = retrofit.create(ApiService.class);

                Map<String, String> params = new HashMap<>();
                params.put("uid", "71");
                Call<MessageBean<InfoBean>> call = service.getInfo(params);

                //进行异步操作
                call.enqueue(new Callback<MessageBean<InfoBean>>() {
                    //成功
                    @Override
                    public void onResponse(Call<MessageBean<InfoBean>> call, Response<MessageBean<InfoBean>> response) {
                        Log.e("======+", response.body().getMsg());
                        Log.e("线程名称", Thread.currentThread().getId() + Thread.currentThread().getName());
                        textShow.setText("晚安");
                    }

                    //失败
                    @Override
                    public void onFailure(Call<MessageBean<InfoBean>> call, Throwable t) {
                        Log.e("-----", t.getMessage());
                    }
                });
                break;
            case R.id.btn_dianji2:

                Retrofit retrofit2 = new Retrofit.Builder()
                        .baseUrl("http://gank.io/api/")
                        //添加Gson自动解析
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                 ApiService service2 = retrofit2.create(ApiService.class);
                Call<NewsBean<List<News>>> call1 = service2.getNews("10","1");
                call1.enqueue(new Callback<NewsBean<List<News>>>() {
                    @Override
                    public void onResponse(Call<NewsBean<List<News>>> call, Response<NewsBean<List<News>>> response) {
                        List<News> results = response.body().getResults();
                        if(results!=null){
                            Log.i("新闻条目的数量:", String.valueOf(results.size()));
                        }else{
                            Log.i("新闻条目的数量:","0");
                        }
                    }

                    @Override
                    public void onFailure(Call<NewsBean<List<News>>> call, Throwable t) {
                        Log.i("++++", t.getMessage());

                    }
                });
                break;
        }
    }
}
6.第一条接口的外层泛型封装类

package com.example.retrofitdemo0413;

public class MessageBean<T> {

    private String msg;
    private String code;
    private T data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
7.第一条接口的内层封装类

package com.example.retrofitdemo0413;

public class InfoBean {

    private String appsecret;
    private String createtime;
    private int fans;
    private int follow;
    private int gender;
    private String icon;
    private String mobile;
    private int money;
    private String nickname;
    private String password;
    private String token;
    private int uid;
    private String username;

    public String getAppsecret() {
        return appsecret;
    }

    public void setAppsecret(String appsecret) {
        this.appsecret = appsecret;
    }

    public String getCreatetime() {
        return createtime;
    }

    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }

    public int getFans() {
        return fans;
    }

    public void setFans(int fans) {
        this.fans = fans;
    }

    public int getFollow() {
        return follow;
    }

    public void setFollow(int follow) {
        this.follow = follow;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPassword() {
        return password;
    }

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

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}
8.第二条接口的外层泛型封装类

package com.example.retrofitdemo0413;

public class NewsBean<T> {
    private String count;
    private Boolean error;
    private T results;

    public String getCount() {
        return count;
    }

    public void setCount(String count) {
        this.count = count;
    }

    public Boolean getError() {
        return error;
    }

    public void setError(Boolean error) {
        this.error = error;
    }

    public T getResults() {
        return results;
    }

  9.第二条接口的内层封装类  
package com.example.retrofitdemo0413;

public class News {

    private String desc;
    private String ganhuo_id;
    private String publishedAt;
    private String readability;
    private String type;
    private String url;
    private String who;

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getGanhuo_id() {
        return ganhuo_id;
    }

    public void setGanhuo_id(String ganhuo_id) {
        this.ganhuo_id = ganhuo_id;
    }

    public String getPublishedAt() {
        return publishedAt;
    }

    public void setPublishedAt(String publishedAt) {
        this.publishedAt = publishedAt;
    }

    public String getReadability() {
        return readability;
    }

    public void setReadability(String readability) {
        this.readability = readability;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getWho() {
        return who;
    }

    public void setWho(String who) {
        this.who = who;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值