使用Rxjava+Retrofit2+Jackson同服务端通信

安卓开发中,使用 Retrofit +RxJava + Dagger2 可以说是目前比较潮的一套框架,所以就此研究了下。

关于Retrofit和RxJava的学习可以看下这个:Retrofit+RxJava实战日志

源码下载
首先配置依赖:

 //RxJava
    compile 'io.reactivex:rxjava:1.0.19'
    //RxAndroid
    compile 'io.reactivex:rxandroid:1.2.1'
    //Jackson
    compile 'com.fasterxml.jackson.core:jackson-databind:2.8.1'
    compile 'com.fasterxml.jackson.core:jackson-core:2.8.1'
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.1'
    //Retrofit2
    compile 'com.squareup.retrofit2:retrofit:2.0.0'
    compile 'com.squareup.retrofit2:converter-jackson:2.0.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
    //Dagger2
    compile 'com.google.dagger:dagger:2.0.2'
    compile 'com.google.dagger:dagger-compiler:2.0.2'


AndroidManifest.xml里添加网路访问权限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.iuoon.mwuyz.tmclient">

    <!--添加网络访问权限 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission>
    <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/s_logo"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".activity.WelcomeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activity.MainActivity"></activity>
    </application>

</manifest>


新建Retrofit通信工具类

package com.iuoon.mwuyz.tmclient.common;

import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.jackson.JacksonConverterFactory;

/**
 * Created by mwuyz on 2016/8/17.
 */
public abstract  class RRetrofit {
    public static String BASE_URL = "http://192.168.1.118:8080";
    private static final int DEFAULT_TIMEOUT = 3;
    
    public static <T> T create(final Class<T> cls) {
        Retrofit.Builder builder = new Retrofit.Builder();
        OkHttpClient.Builder httpBuilder = new OkHttpClient.Builder();
        //设置超时时间
        OkHttpClient client=httpBuilder.readTimeout(DEFAULT_TIMEOUT, TimeUnit.MINUTES)
                .connectTimeout(DEFAULT_TIMEOUT, TimeUnit.MINUTES).writeTimeout(DEFAULT_TIMEOUT, TimeUnit.MINUTES)
                .build();
        Retrofit retrofit = builder
                .baseUrl(BASE_URL)
                .client(client)
                .addConverterFactory(JacksonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        return retrofit.create(cls);
    }
}

定义api调用接口:

package com.iuoon.mwuyz.tmclient.api;

import com.iuoon.mwuyz.tmclient.common.TransVo;
import com.iuoon.mwuyz.tmclient.model.TWNotice;
import com.iuoon.mwuyz.tmclient.model.TWUser;

import java.util.List;

import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;
/**
 * @Title 服务端api接口
 * @Query 表示这是一个参数
 * @Description :通信请求api接口
 * Created by iuoon on 2016/8/17.
 * @version  v1.0.0
 */
public interface TiyoService {

    // 登陆
    @POST("/login")
    Observable<TransVo<TWUser>> login(@Query("userName") String userName, @Query("password") String password);

    @POST("/register")
    Observable<TransVo<TWUser>> register(@Body TWUser user);

    @GET("/getNotice")
    Observable<TransVo<List<TWNotice>>> getNotice();

}


接下来就可以使用 Retrofit对服务端进行进请求,示例代码:

package com.iuoon.mwuyz.tmclient.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;

import com.iuoon.mwuyz.tmclient.R;
import com.iuoon.mwuyz.tmclient.api.TiyoService;
import com.iuoon.mwuyz.tmclient.common.RRetrofit;
import com.iuoon.mwuyz.tmclient.common.TransVo;
import com.iuoon.mwuyz.tmclient.model.TWNotice;
import com.iuoon.mwuyz.tmclient.model.TWUser;
import java.util.List;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

/**
 * 测试rxjava+Retrofit+jackson
 */
public class MainActivity extends AppCompatActivity {

    private TiyoService service= RRetrofit.create(TiyoService.class);

    private EditText etext;
    private TextView ttext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etext=(EditText) findViewById(R.id.editText);
        ttext=(TextView) findViewById(R.id.textView3);
        login();
        getNotice();
    }


    /*此处用RxJava+Retrofit */
    public void login(){
        service.login("iuoon","123456")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe( new Subscriber<TransVo<TWUser>>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("login error----->", e.toString());
                    }

                    @Override
                    public void onNext(TransVo<TWUser> lresp) {
                        Log.d("login success----->",lresp.getCode()+"---"+ lresp.getMessage());
                        etext.setText(lresp.getParams().getName());
                    }
                });
    }

    public void getNotice(){

        service.getNotice()
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe( new Subscriber<TransVo<List<TWNotice>>>() {
                    @Override
                    public void onCompleted() {
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("getNotice error----->", e.toString());
                    }

                    @Override
                    public void onNext(TransVo<List<TWNotice>> lresp) {
                        Log.d("getNotice success----->",lresp.getCode()+"---"+ lresp.getMessage());
                        List<TWNotice> noticeList=lresp.getParams();
                        Log.d("title:",noticeList.get(0).getNoticeTitle());
                        ttext.setText(noticeList.get(0).getNoticeTitle());
                    }
                });
    }

}

简单页面效果:


安卓客户端源代码下载

Spring Boot服务端下载



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值