RxJava+Retrofit小测验 在线翻译功能

使用金山词霸API+RxJava2+Retrofit完成,金山词霸API URL格式http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world

代码如下:

Activity:

public class MainActivity extends AppCompatActivity {

    private EditText editText;

    private TextView textView;

    private String TAG = "MainActivity";

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

        editText = findViewById(R.id.edit);

        textView = findViewById(R.id.show);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s==null||"".equals(s.toString())){
                    textView.setText("");
                    return;
                }
                String a = "fy";
                String f = "auto";
                String t = "auto";
                String w = s.toString();
                CibaEngine
                        .getInstance()
                        .getService()
                        .getCall(a,f,t,w)
                        .distinct()//过滤掉重复事件
                        //.skip(1)
                        .filter(new Predicate<Model>() {
                            @Override
                            public boolean test(Model model) throws Exception {
                                return model!=null&&model.getStatus()==1;
                            }
                        })
                        .throttleFirst(1, TimeUnit.SECONDS)//两秒内只响应第一次事件 根据采样频率来获取事件
                        .observeOn(Schedulers.io())
                        .debounce(1, TimeUnit.SECONDS)//延迟一秒再发送
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Observer<Model>() {
                            @Override
                            public void onSubscribe(Disposable d) {
                                Log.d(TAG, "onSubscribe");
                            }

                            @Override
                            public void onNext(Model model) {
                                Log.d(TAG, "onNext: "+model.getContent().getOut());
                                textView.setText(model.getContent().getOut());
                            }

                            @Override
                            public void onError(Throwable e) {
                                Log.d(TAG, "onError: 错误"+e);
                            }

                            @Override
                            public void onComplete() {
                                Log.d(TAG, "onComplete: 完成");
                            }
                        });
            }
        });

    }
}

Service:

public interface CibaService {

     String URL = "http://fy.iciba.com/";

     @GET("ajax.php")
     Observable<Model> getCall(@Query("a") String a,@Query("f") String f,@Query("t") String t,@Query("w") String w);
}

engine:

public class CibaEngine {

    private volatile static CibaEngine cibaEngine;

    private Retrofit retrofit;

    public CibaEngine() {

        retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(CibaService.URL)
                .build();

    }

    public static CibaEngine getInstance(){
        if (cibaEngine==null){
            synchronized (CibaEngine.class){
                cibaEngine = new CibaEngine();
            }
        }
        return cibaEngine;
    }

    public CibaService getService(){
        return retrofit.create(CibaService.class);
    }
}

Model:

public class Model {

    private int status;

    private Content content;

    public Model(int status, Content content) {
        this.status = status;
        this.content = content;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public Content getContent() {
        return content;
    }

    public void setContent(Content content) {
        this.content = content;
    }

    public class Content{

        private String from;

        private String to;

        private String vendor;

        private String out;

        private String ciba_use;

        private String ciba_out;

        private int err_no;

        public Content(String from, String to, String vendor, String out, String ciba_use, String ciba_out, int err_no) {
            this.from = from;
            this.to = to;
            this.vendor = vendor;
            this.out = out;
            this.ciba_use = ciba_use;
            this.ciba_out = ciba_out;
            this.err_no = err_no;
        }

        public String getFrom() {
            return from;
        }

        public void setFrom(String from) {
            this.from = from;
        }

        public String getTo() {
            return to;
        }

        public void setTo(String to) {
            this.to = to;
        }

        public String getVendor() {
            return vendor;
        }

        public void setVendor(String vendor) {
            this.vendor = vendor;
        }

        public String getOut() {
            return out;
        }

        public void setOut(String out) {
            this.out = out;
        }

        public String getCiba_use() {
            return ciba_use;
        }

        public void setCiba_use(String ciba_use) {
            this.ciba_use = ciba_use;
        }

        public String getCiba_out() {
            return ciba_out;
        }

        public void setCiba_out(String ciba_out) {
            this.ciba_out = ciba_out;
        }

        public int getErr_no() {
            return err_no;
        }

        public void setErr_no(int err_no) {
            this.err_no = err_no;
        }
    }
}

效果如下:

 

posted @ 2020-03-31 10:41  DreamCatt  阅读(111)  评论(0)    收藏  举报