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; } } }
效果如下:


浙公网安备 33010602011771号