package com.bigfat.rxjavademo; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.widget.ImageView; import android.widget.Toast; import com.bigfat.rxjavademo.retrofit.GitHubService; import com.bigfat.rxjavademo.retrofit.MingdaoService; import java.util.ArrayList; import java.util.List; import kale.adapter.CommonRcvAdapter; import kale.adapter.item.AdapterItem; import retrofit2.Retrofit; import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private List<PostData> mPostData = new ArrayList<>(); private CommonRcvAdapter<PostData> commonRcvAdapter = new CommonRcvAdapter<PostData>(mPostData) { @NonNull @Override public AdapterItem createItem(Object o) { return new PostDataItem(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); //initData2(); //test1(); //test2(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.rv_content); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(linearLayoutManager); mRecyclerView.setAdapter(commonRcvAdapter); } private void initData() { //Observable.defer(() -> Observable.just(new GsonBuilder().create().fromJson(C.DATA, PostDataEntity.class))) Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); MingdaoService service = retrofit.create(MingdaoService.class); service.getPostData() .subscribeOn(Schedulers.io()) .observeOn(Schedulers.io()) //.flatMap(postDataEntity -> Observable.from(postDataEntity.getPosts())) //.filter(postData -> postData.getUser().getName().startsWith("任")) //.collect(() -> { // PostDataEntity postDataEntity = new PostDataEntity(); // postDataEntity.setPosts(new ArrayList<>()); // return postDataEntity; //}, (postDataEntity, postData) -> postDataEntity.getPosts().add(postData)) .observeOn(AndroidSchedulers.mainThread()) .subscribe(postDataEntity -> { Log.d("MainActivity", Thread.currentThread().getName()); mPostData.addAll(postDataEntity.getPosts()); commonRcvAdapter.notifyDataSetChanged(); }); } private void initData2() { Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); GitHubService service = retrofit.create(GitHubService.class); //Call<List<Repo>> repos = service.listRepos("yueban"); //repos.enqueue(new Callback<List<Repo>>() { // @Override // public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) { // Log.d("ManiActivity", response.body().toString()); // Log.d("ManiActivity", response.toString()); // } // // @Override // public void onFailure(Call<List<Repo>> call, Throwable t) { // Log.d("ManiActivity", t.toString()); // } //}); service.listRepos("yueban") .subscribeOn(Schedulers.io()) .flatMap(Observable::from) .observeOn(AndroidSchedulers.mainThread()) .subscribe(repo -> { Log.d("ManiActivity", repo.toString() + "\n"); }); } private void test1() { final int drawableRes = R.mipmap.ic_launcher; final ImageView imageView = (ImageView) findViewById(R.id.iv); Observable.OnSubscribe<Drawable> onSubscribe = subscriber -> { Drawable drawable = getResources().getDrawable(drawableRes); subscriber.onNext(drawable); subscriber.onCompleted(); }; Observable.create(onSubscribe) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Drawable>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { Toast.makeText(MainActivity.this, "error!error!error!error!error!error!error!error!error!error!", Toast.LENGTH_SHORT).show(); } @Override public void onNext(Drawable drawable) { imageView.setImageDrawable(drawable); } }); } private void test2() { Observable.just(1, 2, 3, 4) .subscribeOn(Schedulers.io()) .observeOn(Schedulers.newThread()) .map(integer -> integer + "") .observeOn(Schedulers.io()); } }