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

原创 2018年04月15日 21:01:59

    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;
    }
}


android retrofit 实战自定义converter,解决相同接口返回不同数据的问题

square的retrofit是目前比较火的网络框架,我目前也在用 今天项目上遇到一个问题,就是请求同一个接口,可能返回不同的json格式 例如,访问一个登录接口,成功的时候,返回的是 {     "...
  • vinoMVP
  • vinoMVP
  • 2017-01-10 23:51:20
  • 3616

Gson+retrofit解析同一位置不同类型的json数据

前情提要:上回提到全局token刷新功能在和服务端联调的时候居然失败了,到底是哪里出了问题呢? 通过查log,发现报了个JsonSyntaxException,原来罪魁祸首是服务端json的格式不...
  • u013064618
  • u013064618
  • 2016-12-06 14:28:59
  • 1474

Retrofit2 结合 Rxjava 解决返回的 JSON

Retrofit2 结合 Rxjava 解决返回的 JSON
  • u014608640
  • u014608640
  • 2016-11-08 10:58:01
  • 5190

retrofit数据返回类型不统一解析方法

最新做的新项目里遇到接口返回类型不同一的情况没有按照默认格式返回,有点小头疼,这里自己写了个方法偷懒下 正常在开发的时候后台返回的json数据一般会遵从一定的格式返回,但也不排除会遇到一些数据没有格式...
  • b543660627
  • b543660627
  • 2017-11-02 14:19:16
  • 261

RxJava Retrofit2 网络请求,返回数据格式统一的数据报文处理方法

一般的网络请求接口,返回的数据结构都是一致且约定好的,那么使用rxJava+retorfit2 如何能够快速的处理这种结构统一的数据报文...
  • soslinken
  • soslinken
  • 2016-04-14 10:38:34
  • 6029

Retrofit实现异步访问数据

使用Retrofit访问API接口,相对更安全也更强大方便。一般适用于通过API接口下载Json或者Xml的数据,下载完成能直接解析成Java类,通过类的对象直接获得数据。相比Retrofit1.9而...
  • zhaozhiwen6140
  • zhaozhiwen6140
  • 2016-08-02 18:23:51
  • 811

Retrofit网络请求框架要点总结

Retrofit网络请求框架要点总结概述 Retrofit2是利用接口、方法和注解参数来声明定义请求的。 默认采用OkHttp(retrofit1.x中用的是Square包下的,retrofit2...
  • tea_leaves
  • tea_leaves
  • 2016-02-04 11:28:01
  • 1942

Retrofit统一处理服务器返回参数

想了下还是写下这篇博客,去年遇到的一个坑。 关于这个服务器返回的请求状态,我以前用的是这种方式: 给 Android 开发者的 RxJava 详解 RxJava+Retrofit,在联网返回后如...
  • u010386612
  • u010386612
  • 2017-03-28 15:43:02
  • 2343

关于Retrofit返回错误信息的统一解决办法

最近哥们儿遇到的一个棘手难题,关于Retrofit请求的处理,一开始我觉得这种一般简单,根据返回code来就行,框架都给封装好了啊,之后自己上手之后才发现有些还是需要处理的。 问题如下图所示: 我...
  • u010724819
  • u010724819
  • 2017-09-28 14:39:38
  • 550

RxJava与Retrofit 结合请求后台数据并解析

1.核心: 一个方法类(HttpMethod)+一个接口(HttpService) public class ADHttpMethods { public static final Strin...
  • meetings
  • meetings
  • 2017-01-06 21:44:47
  • 29350
收藏助手
不良信息举报
您举报文章:Retrofit异步请求数据 (两种接口路径 ?,/)
举报原因:
原因补充:

(最多只允许输入30个字)