retrofit2

Retrofit2是基于OkHttp的网络请求框架,通过注解的方式配置请求。

参考教程

首先自己写个网站页面info.php,简单的php,返回json格式字符串:

<?php
echo '
{ "Employees": [ { "FirstName":"Bill" , "LastName":"Gates" }, { "FirstName":"George" , "LastName":"Bush" }, { "FirstName":"Thomas" , "LastName":"Carter" } ] }
';
?>

开启phpstudy后访问本机ip.info.php时页面上会显示{ "Employees": [ { "FirstName":"Bill" , "LastName":"Gates" }, { "FirstName":"George" , "LastName":"Bush" }, { "FirstName":"Thomas" , "LastName":"Carter" } ] }

android工程中添加依赖:

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'		//解析gson

首先定义接口

public interface Emp {
        @GET("info.php")			//http使用get方法
        Call<Emplinfo> getinfo();	//定义getinfo方法,若有参数可在圆括号内添加如下形式的参数:@Query("city")  String city,即访问“ip.info.php?city=值”。返回值为Emplinfo类型,等会儿写	
    }

然后定义 Emplinfo类,####变量名需要和json里的名字相同↓↓↓####

public class Emplinfo{

        private List<Employee> Employees;          //就是这里

        public List<Employee> getEmployees() {
            return Employees;
        }

        public void setEmployees(List<Employee> employees) {
            Employees = employees;
        }
    }

接着是Employee类,get和set省略了:

public class Employee{
        private String FirstName;
        private String LastName;
        。。。
    }

然后:

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://********")					//自己的ip
                .addConverterFactory(GsonConverterFactory.create())			//设置 Json 转换器
                .build();
        Emp emp=retrofit.create(Emp.class);						//新建一个自定义的类的实例
        Call<Emplinfo> call = emp.getinfo();					//新建getinfo方法实例
        call.enqueue(new Callback<Emplinfo>() {					//执行,重写成功和失败方法
            @Override
            public void onResponse(Call<Emplinfo> call, Response<Emplinfo> response) {
                L.json(response.body().getEmployees()); 		//得到Employee数组

            }

            @Override
            public void onFailure(Call<Emplinfo> call, Throwable t) {
                Log.d(TAG, "Throwable : " + t);
            }
        });

然后看rxjava和retrofit结合

修改接口

    public interface Emp {
        @GET("info.php")
        Observable<Emplinfo> getinfo();
    }

还需要添加一个依赖,如果不添加会用rxjava的适配器而不是rxjava2的,不会提示语法错误,但是运行会报错空指针:

    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

请求改成如下:

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://cyp.natapp1.cc/")//基础URL 建议以 / 结尾
                .addConverterFactory(GsonConverterFactory.create())//设置 Json 转换器
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//RxJava 适配器             //新添加
                .build();
        Emp emp=retrofit.create(Emp.class);
        emp.getinfo().observeOn(AndroidSchedulers.mainThread())			//指定observer的回调方法运行在主线程
                .subscribeOn(Schedulers.io())						    //运行在io线程
                .subscribe(new Observer<Emplinfo>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        L.d("onsubscribe");
                    }

                    @Override
                    public void onNext(Emplinfo emplinfo) {
                        L.json(emplinfo);
                    }

                    @Override
                    public void onError(Throwable e) {
                        L.d("onerror"+e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        L.d("oncomplete");
                    }
                });

成功输出。

06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ╔══════════════════════════════════════════════════════════════════════════════════════════════════
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║ Thread: main
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ╟──────────────────────────────────────────────────────────────────────────────────────────────────
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║ com.safframework.log.handler.ObjectHandler.handle  (ObjectHandler.kt:16)
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ╟──────────────────────────────────────────────────────────────────────────────────────────────────
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║ class com.example.myapplication.Test1$Emplinfo
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║ {
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║   "employees": [
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     {
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "firstName": "Bill",
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "lastName": "Gates"
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     },
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     {
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "firstName": "George",
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "lastName": "Bush"
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     },
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     {
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "firstName": "Thomas",
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║       "lastName": "Carter"
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║     }
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║   ]
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ║ }
06-26 09:15:27.410 3633-3633/com.example.myapplication I/System.out: ╚══════════════════════════════════════════════════════════════════════════════════════════════════
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值