更改 Retrofit解析网页Json数据简单实例,将Retrofit中的回调方式改为RxJava方式
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
}
package com.android.retrofitdemo;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;
/**
* 获取新闻列表
*/
public interface NewsService {
/*@GET("/api/cook/list" )
Call<Tngou> getNews(@Query("id") int id, @Query("page") int page, @Query("rows") int rows);*/
@GET("/api/cook/list")
Observable<Tngou> getNews(@Query("id") int id, @Query("page") int page, @Query("rows") int rows);
}
package com.android.retrofitdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import rx.subjects.Subject;
public class MainActivity extends AppCompatActivity{
@BindView(R.id.news_listView)
ListView newsListView;
private NewsAdapter adapter;
private List<News> newsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.tngou.net")
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
NewsService newsService = retrofit.create(NewsService.class);
//Call<Tngou> call = newsService.getNews(0,1,20);
//call.enqueue(this);
newsService.getNews(0,1,20)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Tngou>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Tngou tngou) {
newsList = tngou.getNewsList();
adapter.addAll(newsList);
}
} );
ListView newsListView = (ListView) findViewById(R.id.news_listView);
adapter = new NewsAdapter(this, new ArrayList<News>());
newsListView.setAdapter(adapter);
}
/*@Override
public void onResponse(Call<Tngou> call, Response<Tngou> response) {
newsList = response.body().getNewsList();
adapter.addAll(newsList);
}
@Override
public void onFailure(Call<Tngou> call, Throwable t) {
t.printStackTrace();
}*/
}