使用Retrofit和RxJava
使用Retrofit和RxJava整合访问网络,然后将数据显示到界面上
def retrofitVersion = '2.0.0-beta1' dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:design:22.2.1' //Retrofit
compile "com.squareup.retrofit:retrofit:$retrofitVersion"
compile "com.squareup.retrofit:converter-gson:$retrofitVersion" //RxJava
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
}
在app.buidle里面添加ReTrofit和RxJava的依赖,在
dependencies上面一定要注明Retrofit的版本号
def retrofitVersion = '2.0.0-beta1' MainActivity里面的代码:
public class MainActivity extends Activity implements View.OnClickListener {
/**
* 自定义的观察者
*/
public MyObserver observer; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this); observer = new MyObserver();//创建一个观察者 }
//点击按钮就请求网络
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn) {//点击获取好友动态
Control control = new Control(this);
control.getFriendsShareFromServer();//访问网络并且解析Json }
} /**
* 自定义的观察者
*/
class MyObserver implements rx.Observer<Resquest_friends_info> { @Override
public void onCompleted() {
Log.d("msg", "观察的事件结束了---");
} @Override
public void onError(Throwable e) {
Log.d("msg", "观察的事件出错了");
}
//订阅观察者后,被观察者会把数据传回来
@Override
public void onNext(Resquest_friends_info resquest_friends_info) {
Log.d("msg", "观察者OnNext");
ArrayList<Resquest_friends_info.EveryShareInfo> results = resquest_friends_info.getResult();
Toast.makeText(MainActivity.this,"观察者收到了数据",Toast.LENGTH_SHORT).show(); for (Resquest_friends_info.EveryShareInfo info : results) {//每条分享的信息
Log.d("msg", "分享信息++++" + info.getPub_context() + "--->" + info.getPub_datetime() + "----->" + info.getPub_frd_name());
Log.d("msg", "-----------------------------------------------------"); for (Resquest_friends_info.EveryShareInfo.Reply reply : info.pub_com) {//每条回复
Log.d("msg", "评论+++++" + reply.getPc_name() + "--->" + reply.getPc_txt() + "--->");
Log.d("msg", "----------------------------------------------------------------");
}
for (Resquest_friends_info.EveryShareInfo.Thumb thumb : info.pub_thumup) {//每个点赞
Log.d("msg", "点赞++++" + thumb.getPt_name());
Log.d("msg", "---------------------------------------");
}
}
}
}
}
Resquest_friends_info表示一个JavaBean对象,
app结构如下:
//访问网络的接口
public interface GitHubService {
// ================================================ = = == ==========
//
//表示Get请求,里面是地址这是写死的地址,但是地址中的参数要动态改变,就不能这样写
// @GET("/index.php?m=home&c=message&a=resquest_friends_info&uid=1234567&p=1")
//参数要动态传进去,所以要这样写
//@GET(value = "/index.php"), 或者@GET("/index.php")也可以
@GET("/index.php")
//用这个方法去访问网络
Call<Resquest_friends_info> getFriendsShareInfo(@Query("m") String m,@Query("c") String c,@Query("a") String a,@Query("uid") String uid,@Query("p") String p);
} 这里的路径可以自己修改,比如,写成这样也是可以的:
//@GET("/index.php?m=home")
//Call<Resquest_friends_info> getFriendsShareInfo(@Query("c") String c,@Query("a") String a,@Query("uid") String uid,@Query("p") String p);
/**此类是访问网络的Control
* Created by xhj on 15-12-18.
*/
public class Control {
public static final String TAG="msg";
//URL根路径,一般就是域名
public static final String APITrack="http://192.168.1.102";
private MainActivity activity;
/**构造方法时把观察者所在的类传进来*/
public Control(MainActivity activity){
this.activity=activity;
}
/**从服务器获取好友动态*/
public void getFriendsShareFromServer(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(APITrack)
.addConverterFactory(GsonConverterFactory.create())//用Gson去解析数据
.build();
GitHubService git = retrofit.create(GitHubService.class);
Call<Resquest_friends_info> call = git.getFriendsShareInfo();
call.enqueue(new Callback<Resquest_friends_info>() {
//访问网络回来,并且成功拿到数据就调用这个方法
@Override
public void onResponse(Response<Resquest_friends_info> response) {
final Resquest_friends_info resquest_friends_info = response.body(); Observable<Resquest_friends_info> observable = Observable.create(new Observable.OnSubscribe<Resquest_friends_info>() {
@Override
public void call(Subscriber<? super Resquest_friends_info> subscriber) {
subscriber.onNext(resquest_friends_info);
subscriber.onCompleted();//事件结束
}
});
observable.subscribe(activity.observer);//订阅观察者 } @Override
public void onFailure(Throwable t) {
Log.d("msg","失败了");
}
}); }
}
使用Retrofit和RxJava的更多相关文章
- Retrofit结合RxJava使用指南
Retrofit结合RxJava使用指南 Retrofit是一个当前很流行的网络请求库, 官网的介绍是: "Type-safe HTTP client for Android and Jav ...
- Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...
- Retrofit与RXJava整合
Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API.下面我用对比的方式来介绍 Retrofit 的 RxJava 版 ...
- Android笔记之Retrofit与RxJava的组合
依赖 implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:con ...
- Retrofit+Okhttp+RxJava打造网络请求之Post
之前一直在准备Android培训的事情,所幸的是终于完事啦,在这过程中真的发现了自身无论从沟通能力还是技术能力上很多的不足,就用一句 路漫漫其修远兮,吾将上下而求索 来勉励自己吧.之前也在项目上用上O ...
- Retrofit与RXJava整合(转)
Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API.下面我用对比的方式来介绍 Retrofit 的 RxJava 版 ...
- Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(二)
1,昨天我们基本上把MVP给封装起来了,今天接着昨天的东西来结合RxJava把Retrofit把网络框架简单的封装一下,先看一下我们今天实现的效果: 哈哈 ,还是昨天的效果,好吧 ,我认错. 2,由于 ...
- Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(一)
1,其实早就想把这些东西给封装封装的,一直没有时间,今天刚好项目进入到测试阶段了,Bug同事在哪儿测试的飞起,但发现提bug的尽然是我(得意脸),然后上午把ios的包测试了一下,顺便把服务器给测挂了( ...
- retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】
项目地址:https://github.com/baiqiantao/retrofit2_okhttp3_RxJava_butterknife.git <uses-permission andr ...
随机推荐
- validator验证
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- Jena 简介:通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型
简介: RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以 ...
- 定义django admin的站点头,标题等
admin.py from django.contrib import admin from app.models import Product # Register your models here ...
- Hibernate与Sleep的区别
转自:http://blog.sina.com.cn/s/blog_4b6e98810100n37k.html 休眠(Hibernate),将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘 ...
- YII 常用路径总结
Yii framework已经定义的命名空间常量 system: 指向Yii框架目录; YII\framework zii: 指向zii library 目录; YII\framework\zii ...
- git(工作区,暂存区,管理修改,撤销修改,删除文件)
工作区和暂存区 984次阅读 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的l ...
- hdu_5768_Lucky7(中国剩余定理+容斥)
题目链接:hdu_5768_Lucky7 题意: 给你一个区间,问你这个区间内是7的倍数,并且满足%a[i]不等于w[i]的数的个数 乍一看以为是数位DP,仔细看看条件,发现要用中国剩余定理,然后容斥 ...
- Tomcat服务器顶层结构和启动过程【转】
号外:2016 最流行的是哪一种 Java 应用服务器呢? 通过从部署的 1240 个 JVM 中得到的数据,我们能够确定出现了 862 个容器供应商,或者说是占到了运行环境的 70% 左右.这些容器 ...
- ant 配置 和测试 1
配置路径 D:\dba\change\UAT\unity\schema\test ----v0 版本 sql.xml (默认target 是versionfinal ,也就是最终版本) --ver ...
- 转 Oracle 12c 使用scott等普通用户的方法
一.前言 最近电脑上安装了oracle 12c数据库,想体验下新特性.安装完后,便像11g一样在dos窗口进行下面的操作: SQL*Plus: Release 12.1.0.2.0 Productio ...