观察者模式RXjava

package com.example.myrxjavatest;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.provider.Telephony;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

import rx.Observable;
import rx.Observer;
import rx.Scheduler;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func0;
import rx.functions.Func1;
import rx.schedulers.Schedulers;


public class MyActicity1 extends AppCompatActivity {
    Context context;
    private ImageView imageView;
    private ArrayList<Student> arrayList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;

//        createObserver();
//        createObserverable();
//        test1();
//        test2();
//        test3();
//        test5("");
//        test6("");
//        initData();
        test7("");
    }

    private void initData() {
        Student student1 = new Student("kebi", "16", "90", "91", "92");
        Student student2 = new Student("kebi", "17", "80", "81", "92");
        Student student3 = new Student("kate", "18", "70", "71", "72");
        Student student4 = new Student("laoliu", "19", "60", "61", "62");
        arrayList.add(student1);
        arrayList.add(student2);
        arrayList.add(student3);
        arrayList.add(student4);
    }

    private void test7(String s2) {

        Observable.create(new Observable.OnSubscribe<ArrayList<Student>>() {
            @Override
            public void call(Subscriber<? super ArrayList<Student>> subscriber) {
                initData();//比如是数据库查询,耗时 io
                subscriber.onNext(arrayList);
            }
        })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .flatMap(new Func1<ArrayList<Student>, Observable<Student>>() {
                    @Override
                    public Observable<Student> call(ArrayList<Student> students) {
                        return Observable.from(students);
                    }
                })
                .filter(new Func1<Student, Boolean>() {
                    @Override
                    public Boolean call(Student student) {
                        return student.getName().endsWith("kebi");
                    }
                })
                .filter(new Func1<Student, Boolean>() {
                    @Override
                    public Boolean call(Student student) {
                        return student.getAge().endsWith("17");
                    }
                })
                .subscribe(new Subscriber<Student>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Student student) {
                        Toast.makeText(context, "<><><><><><>" + student.toString(), Toast.LENGTH_SHORT).show();
                    }
                });

    }

    private void test6(String s) {
        Observable
                .create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                try {
                    is = context.getAssets().open("test.json");
                    bis = new BufferedInputStream(is);
                    bos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024 * 4];
                    int len = -1;
                    while ((len = bis.read(buffer)) != -1) {
                        bos.write(buffer, 0, len);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        is.close();
                        bis.close();
                        bos.flush();
                        bos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                try {
                    is = context.getAssets().open("test.json");
                    bis = new BufferedInputStream(is);
                    bos = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024 * 4];
                    int len = -1;
                    while ((len = bis.read(buffer)) != -1) {
                        bos.write(buffer, 0, len);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        is.close();
                        bis.close();
                        bos.flush();
                        bos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                subscriber.onNext(bos.toString());
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<String>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(String s) {
                        Log.d("TAG", "<><><><><><><><><>:" + s);

                    }
                });
    }

    InputStream is = null;
    BufferedInputStream bis = null;
    ByteArrayOutputStream bos = null;

    private void test5(final String file) {

        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext(file);
            }
        }).observeOn(Schedulers.io())
                .map(new Func1<String, String>() {
                    @Override
                    public String call(String s) {
                        try {
                            is = context.getAssets().open("test.json");
                            bis = new BufferedInputStream(is);
                            bos = new ByteArrayOutputStream();
                            byte[] buffer = new byte[1024 * 4];
                            int len = -1;
                            while ((len = bis.read(buffer)) != -1) {
                                bos.write(buffer, 0, len);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                is.close();
                                bis.close();
                                bos.flush();
                                bos.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        return bos.toString();
                    }
                }).subscribe(new Subscriber<String>() {
            @Override
            public void onStart() {
                super.onStart();
            }

            @Override
            public void onCompleted() {
                Log.d("TAG", "<><><><><><><><><>:COMPLETE");
            }

            @Override
            public void onError(Throwable e) {
                Log.d("TAG", "<><><><><><><><><>:ONERROR");
            }

            @Override
            public void onNext(String s) {
                Log.d("TAG", "<><><><><><><><><>:" + s);
            }
        });

    }
    private void test4(final String file) {
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext(file);
            }
        }).map(new Func1<String, Drawable>() {
            @Override
            public Drawable call(String s) {
                Drawable drawable = null;
                return drawable;
            }
        }).subscribe(new Subscriber<Drawable>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Drawable drawable) {
                ImageView imageView = new ImageView(MyActicity1.this);
                imageView.setImageDrawable(drawable);
            }
        });
    }

//    }


    private void test3() {

        Observable.just("1", "2", "3")
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        Log.d("TAG", "<><><><><><><><><>:OnNext" + s);
                    }
                }, new Action1<Throwable>() {
                    @Override
                    public void call(Throwable throwable) {
                        Log.d("TAG", "<><><><><><><><><>:ERROR");
                    }
                }, new Action0() {
                    @Override
                    public void call() {
                        Log.d("TAG", "<><><><><><><><><>:COMPLETE");

                    }
                });
    }

    private void test2() {
        Observable<String> observable = Observable.just("1", "2", "3");
        observable.subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.d("TAG", "<>>>>><><><><><><><><><><><><><>:" + s);

            }
        });
    }

    private void test1() {
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("111");
                subscriber.onNext("222");
                subscriber.onNext("333");

            }
        }).subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.d("TAG", "<>>>>><><><><><><><><><><><><><>:" + s);
            }
        });
    }


    private void createObserverable() {
        String[] str = {"0", "1", "2"};
        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {

            }
        });

        Observable<String[]> observable1 = Observable.create(new Observable.OnSubscribe<String[]>() {
            @Override
            public void call(Subscriber<? super String[]> subscriber) {

            }
        });
    }

    private void createObserver() {
        Observer<String> observer = new Observer<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {

            }
        };
    }


    public <T>Observable.Transformer<T,T> ioMain(){
        return new Observable.Transformer<T, T>() {
            @Override
            public Observable<T> call(Observable<T> tObservable) {
               return tObservable.observeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread());
            }
        };
    }

}

猜你喜欢

转载自blog.csdn.net/lk2021991/article/details/79236083