【Android高级】RxJava2.0和Retrofit2.0的使用探究

初次测试:

MainAct:


package com.rx.test.rxtestproject;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;
import com.myrest.test.IGitApi;
import com.myrest.test.UserBean;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.List;

import retrofit.Call;
import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {


    @ViewInject(R.id.textView)
    TextView textView;

    @ViewInject(R.id.imageView)
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewUtils.inject(this);
    }


    public void test1(View v) {
        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {

                subscriber.onNext("haha");
            }
        });
        Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                textView.setText(s);
            }
        };

        observable.subscribe(subscriber);
    }


    public void test2(View v) {

//        Observable<String>observable=Observable.just("just test");
//        Action1<String>action1=new Action1<String>() {
//            @Override
//            public void call(String s) {
//                textView.setText(s);
//            }
//        };
//
//        observable.subscribe(action1);

//        Observable.just("Test just").subscribe(new Action1<String>() {
//            @Override
//            public void call(String s) {
//              textView.setText(s);
//            }
//        });

//        Observable.just("test map")
//                .map(new Func1<String, String >() {
//            @Override
//            public String call(String s) {
//                return s+" in call";
//            }
//        }).map(new Func1<String, String>() {
//            @Override
//            public String call(String s) {
//                return s+" a in";
//            }
//        }).subscribe(new Action1<String>() {
//            @Override
//            public void call(String s) {
//                textView.setText(s);
//            }
//        });

        Observable.just(5).map(new Func1<Integer, String>() {
            @Override
            public String call(Integer integer) {
                return integer + " s1";
            }
        }).map(new Func1<String, Integer>() {
            @Override
            public Integer call(String s) {
                return 9;
            }
        }).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                textView.setText("last:" + integer);
            }
        });

    }


    public void test3(View v) {

        String[] strs = {"a", "b", "c"};


//        Observable.from(strs).subscribe(new Subscriber<String>() {
//            @Override
//            public void onStart() {
//                //      super.onStart();
//                textView.setText("");
//                Log.i("tag", "onStart");
//            }
//
//            @Override
//            public void onCompleted() {
//                Log.i("tag", "onCompleted");
//            }
//
//            @Override
//            public void onError(Throwable e) {
//
//            }
//
//            @Override
//            public void onNext(String s) {
//                Log.i("tag", "onNext");
//                textView.append(s);
//            }
//        });

        Observable.just(Arrays.asList(strs)).flatMap(new Func1<List<String>, Observable<String>>() {
            @Override
            public Observable<String> call(List<String> strings) {
                return Observable.from(strings);
            }
        }).subscribe(new Subscriber<String>() {
            @Override
            public void onStart() {
                textView.setText("");
                Log.i("tag", "onStart");
            }


            @Override
            public void onCompleted() {
                Log.i("tag", "onCompleted");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("tag", "onNext");
                textView.append(s);
            }
        });
    }


    public void test4(View v) {

        Observable.create(new Observable.OnSubscribe<Bitmap>() {
            @Override
            public void call(Subscriber<? super Bitmap> subscriber) {


                try {
                    URL url = new URL("http://a.hiphotos.baidu.com/zhidao/pic/item/0824ab18972bd4073df731c379899e510fb309df.jpg");

                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    InputStream inputStream = httpURLConnection.getInputStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    subscriber.onNext(bitmap);
                    Log.i("tag", "http:" + Thread.currentThread().getName());
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Bitmap>() {
            @Override
            public void call(Bitmap bitmap) {
                imageView.setImageBitmap(bitmap);
                Log.i("tag", "setbitmap:" + Thread.currentThread().getName());
            }
        });

//                    .subscribeOn(Schedulers.io()
//
//            ).
//
//            observeOn(AndroidSchedulers.mainThread()
//
//            ).
//
//            subscribe(new Action1<Bitmap>() {
//                @Override
//                public void call (Bitmap bitmap){
//
//                }
//            }
//
//            );
//        }


    }


    public void test5(View v) {
        String endUrl = "http://ip.taobao.com";

        Retrofit retrofit = new Retrofit.Builder().baseUrl(endUrl).addConverterFactory(GsonConverterFactory.create()).build();

        ApiService apiService = retrofit.create(ApiService.class);

        Call<GetIpInfoResponse> call = apiService.getIpInfo("63.223.108.42");

        call.enqueue(new Callback<GetIpInfoResponse>() {
            @Override
            public void onResponse(Response<GetIpInfoResponse> response, Retrofit retrofit) {
                GetIpInfoResponse getIpInfoResponse = response.body();
                textView.setText(getIpInfoResponse.data.country + "\n" + getIpInfoResponse.toString());
            }

            @Override
            public void onFailure(Throwable t) {
                textView.setText("fail");
            }
        });
    }
    @OnClick(R.id.button)
    public void test6(View v) {
//        String API = "http://api.github.com";
//
//        Retrofit retrofit = new Retrofit.Builder().baseUrl(API).addConverterFactory(GsonConverterFactory.create()).build();
//
//
//        IGitApi iGitApi = retrofit.create(IGitApi.class);
//
//        iGitApi.getData("scboyhj", new Callback<UserBean>() {
//
//            @Override
//            public void onResponse(Response<UserBean> response, Retrofit retrofit) {
//                UserBean userBean = response.body();
//                textView.setText(userBean.toString());
//            }
//
//            @Override
//            public void onFailure(Throwable t) {
//                textView.setText("fail in");
//            }
//        });
        String endUrl = "https://api.github.com";

        Retrofit retrofit = new Retrofit.Builder().baseUrl(endUrl).addConverterFactory(GsonConverterFactory.create()).build();

        IGitApi apiService = retrofit.create(IGitApi.class);

        Call<UserBean> call = apiService.getData("scboyhj");


        call.enqueue(new Callback<UserBean>() {
            @Override
            public void onResponse(Response<UserBean> response, Retrofit retrofit) {
                UserBean userBean = response.body();
                textView.setText(userBean.toString());
            }

            @Override
            public void onFailure(Throwable t) {
                textView.setText("fail in");
            }
        });
    }

}


接口

public interface IGitApi {
    @GET("/users/{user}")
    public Call<UserBean> getData(@Path("user") String user);
}




综合测试:分开和一起

public class MainAct extends AppCompatActivity {

    @ViewInject(R.id.retrorxIg)
    ImageView imageView;
    @ViewInject(R.id.retrorxTv)
    TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rxretrolay);
        ViewUtils.inject(this);
    }

    @OnClick(R.id.retroBt)
    public void testRe(View v) {
        String url = "https://api.github.com";
        Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(url).build();

        GitInter gitInter = retrofit.create(GitInter.class);

        Call<GitBean> gitBeanCall = gitInter.getInfo("scboyhj");

        gitBeanCall.enqueue(new Callback<GitBean>() {
            @Override
            public void onResponse(Response<GitBean> response, Retrofit retrofit) {
                GitBean gitBean = response.body();
                textView.setText(gitBean.toString());
            }

            @Override
            public void onFailure(Throwable t) {
                textView.setText("on fail");
            }
        });

    }

    @OnClick(R.id.rxBt)
    public void testRx(View v) {


        Observable.just("").map(new Func1<String, Bitmap>() {
            @Override
            public Bitmap call(String s) {
                try {
                    URL url = new URL("http://pic30.nipic.com/20130618/11860366_201437262000_2.jpg");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    Bitmap bitmap = BitmapFactory.decodeStream(urlConnection.getInputStream());

                    return bitmap;

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }


                return null;
            }
        }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Bitmap>() {
            @Override
            public void call(Bitmap bitmap) {
                if (bitmap == null) {
                    textView.setText("internet fail");
                } else {
                    imageView.setImageBitmap(bitmap);
                }
            }
        });
    }



    @OnClick(R.id.rx_retro_Bt)
    public  void testRx_Retro(View v){

        String url = "https://api.github.com";
        Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).baseUrl(url).build();

        final GitInter2 gitInter = retrofit.create(GitInter2.class);

        Observable.just("scboyhj").flatMap(new Func1<String, Observable<GitBean>>() {
            @Override
            public Observable<GitBean> call(String s) {

                Observable<GitBean> gitBeanCall = gitInter.getInfo(s);

                return gitBeanCall;
            }
        }).subscribeOn(Schedulers.io()). observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<GitBean>() {
            @Override
            public void onCompleted() {
                Log.i("tag","onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.i("tag","onError");
            }

            @Override
            public void onNext(GitBean gitBean) {
                textView.setText(gitBean.toString());
            }
        });
    }

}





 
 

你可能感兴趣的:(【Android高级】RxJava2.0和Retrofit2.0的使用探究)