简化Presenter,Nucleus组件
来源:互联网 发布:网络端口号 编辑:程序博客网 时间:2024/05/23 13:11
AndroidStudio引用:
dependencies { compile 'info.android15.nucleus:nucleus:4.0.0' compile 'info.android15.nucleus:nucleus-support-v7:4.0.0' compile 'info.android15.nucleus:nucleus-support-v4:4.0.0'}
代码:
presenter代码:
public class MainPresenter extends RxPresenter<MainActivity> {2. 3. public static final String DEFAULT_NAME = "Chuck Norris";4. 5. @Override6. protected void onCreate(Bundle savedState) {7. super.onCreate(savedState);8. 9. App.getServerAPI()10. .getItems(DEFAULT_NAME.split("\\s+")[0], DEFAULT_NAME.split("\\s+")[1])11. .delay(1, TimeUnit.SECONDS)12. .observeOn(AndroidSchedulers.mainThread())13. .compose(this.<ServerAPI.Response>deliverLatestCache())14. .subscribe(new Action1<ServerAPI.Response>() {15. @Override16. public void call(ServerAPI.Response response) {17. getView().onItemsNext(response.items);18. }19. }, new Action1<Throwable>() {20. @Override21. public void call(Throwable throwable) {22. getView().onItemsError(throwable);23. }24. });25. }26.}
Activity 代码:
@RequiresPresenter(MainPresenter.class)29.public class MainActivity extends NucleusActivity<MainPresenter> {30. 31. private ArrayAdapter<ServerAPI.Item> adapter;32. 33. @Override34. public void onCreate(Bundle savedInstanceState) {35. super.onCreate(savedInstanceState);36. setContentView(R.layout.activity_main);37. 38. ListView listView = (ListView)findViewById(R.id.listView);39. listView.setAdapter(adapter = new ArrayAdapter<>(this, R.layout.item));40. }41. 42. public void onItemsNext(ServerAPI.Item[] items) {43. adapter.clear();44. adapter.addAll(items);45. }46. 47. public void onItemsError(Throwable throwable) {48. Toast.makeText(this, throwable.getMessage(), Toast.LENGTH_LONG).show();49. }50.}
基于okhttp的Retrofit、Rxjava、Nucleus:
ServerAPI 代码:
package nucleus.example.base; 2 3 import android.text.Html; 4 5 import com.google.gson.annotations.SerializedName; 6 7 import retrofit.http.GET; 8 import retrofit.http.Query; 9 import rx.Observable; 10 11 public interface ServerAPI { 12 13 public static final String ENDPOINT = "http://api.icndb.com"; 14 15 public static class Item { 16 @SerializedName("joke") 17 public String text; 18 19 @Override 20 public String toString() { 21 return Html.fromHtml(text).toString(); 22 } 23 } 24 25 public static class Response { 26 @SerializedName("value") 27 public Item[] items; 28 } 29 30 @GET("/jokes/random/10") 31 Observable<Response> getItems(@Query("firstName") String firstName, @Query("lastName") String lastName); 32 }
APP代码:
package nucleus.example.base; 2 3 import android.app.Application; 4 import android.util.Log; 5 6 import retrofit.RestAdapter; 7 8 public class App extends Application { 9 10 private static ServerAPI serverAPI; 11 12 @Override 13 public void onCreate() { 14 super.onCreate(); 15 serverAPI = new RestAdapter.Builder() 16 .setEndpoint(ServerAPI.ENDPOINT) 17 .setLogLevel(RestAdapter.LogLevel.FULL) 18 .setLog(new RestAdapter.Log() { 19 @Override 20 public void log(String message) { 21 Log.v("Retrofit", message); 22 } 23 }) 24 .build().create(ServerAPI.class); 25 } 26 27 public static ServerAPI getServerAPI() { 28 return serverAPI; 29 } 30 }
MainPresenter代码:
package nucleus.example.main; 2 3 import android.os.Bundle; 4 import android.support.annotation.NonNull; 5 6 import nucleus.example.base.App; 7 import nucleus.example.base.ServerAPI; 8 import nucleus.presenter.RxPresenter; 9 import rx.Observable; 10 import rx.android.schedulers.AndroidSchedulers; 11 import rx.functions.Action2; 12 import rx.functions.Func0; 13 14 public class MainPresenter extends RxPresenter<MainActivity> { 15 16 public static final String NAME_1 = "Chuck Norris"; 17 public static final String NAME_2 = "Jackie Chan"; 18 public static final String DEFAULT_NAME = NAME_1; 19 20 private static final int REQUEST_ITEMS = 1; 21 22 private static final String NAME_KEY = MainPresenter.class.getName() + "#name"; 23 24 private String name = DEFAULT_NAME; 25 26 @Override 27 public void onCreate(Bundle savedState) { 28 super.onCreate(savedState); 29 30 if (savedState != null) 31 name = savedState.getString(NAME_KEY); 32 33 restartableLatestCache(REQUEST_ITEMS, 34 new Func0<Observable<ServerAPI.Response>>() { 35 @Override 36 public Observable<ServerAPI.Response> call() { 37 return App.getServerAPI() 38 .getItems(name.split("\\s+")[0], name.split("\\s+")[1]) 39 .observeOn(AndroidSchedulers.mainThread()); 40 } 41 }, 42 new Action2<MainActivity, ServerAPI.Response>() { 43 @Override 44 public void call(MainActivity activity, ServerAPI.Response response) { 45 activity.onItems(response.items, name); 46 } 47 }, 48 new Action2<MainActivity, Throwable>() { 49 @Override 50 public void call(MainActivity activity, Throwable throwable) { 51 activity.onNetworkError(throwable); 52 } 53 }); 54 55 if (savedState == null) 56 start(REQUEST_ITEMS); 57 } 58 59 @Override 60 public void onSave(@NonNull Bundle state) { 61 super.onSave(state); 62 state.putString(NAME_KEY, name); 63 } 64 65 public void request(String name) { 66 this.name = name; 67 start(REQUEST_ITEMS); 68 } 69 }
MainActvity代码:
package nucleus.example.main; 2 3 import android.os.Bundle; 4 import android.support.annotation.NonNull; 5 6 import nucleus.example.base.App; 7 import nucleus.example.base.ServerAPI; 8 import nucleus.presenter.RxPresenter; 9 import rx.Observable; 10 import rx.android.schedulers.AndroidSchedulers; 11 import rx.functions.Action2; 12 import rx.functions.Func0; 13 14 public class MainPresenter extends RxPresenter<MainActivity> { 15 16 public static final String NAME_1 = "Chuck Norris"; 17 public static final String NAME_2 = "Jackie Chan"; 18 public static final String DEFAULT_NAME = NAME_1; 19 20 private static final int REQUEST_ITEMS = 1; 21 22 private static final String NAME_KEY = MainPresenter.class.getName() + "#name"; 23 24 private String name = DEFAULT_NAME; 25 26 @Override 27 public void onCreate(Bundle savedState) { 28 super.onCreate(savedState); 29 30 if (savedState != null) 31 name = savedState.getString(NAME_KEY); 32 33 restartableLatestCache(REQUEST_ITEMS, 34 new Func0<Observable<ServerAPI.Response>>() { 35 @Override 36 public Observable<ServerAPI.Response> call() { 37 return App.getServerAPI() 38 .getItems(name.split("\\s+")[0], name.split("\\s+")[1]) 39 .observeOn(AndroidSchedulers.mainThread()); 40 } 41 }, 42 new Action2<MainActivity, ServerAPI.Response>() { 43 @Override 44 public void call(MainActivity activity, ServerAPI.Response response) { 45 activity.onItems(response.items, name); 46 } 47 }, 48 new Action2<MainActivity, Throwable>() { 49 @Override 50 public void call(MainActivity activity, Throwable throwable) { 51 activity.onNetworkError(throwable); 52 } 53 }); 54 55 if (savedState == null) 56 start(REQUEST_ITEMS); 57 } 58 59 @Override 60 public void onSave(@NonNull Bundle state) { 61 super.onSave(state); 62 state.putString(NAME_KEY, name); 63 } 64 65 public void request(String name) { 66 this.name = name; 67 start(REQUEST_ITEMS); 68 } 69 }
阅读全文
0 0
- 简化Presenter,Nucleus组件
- Nucleus
- Presenter
- Presenter
- presenter
- Nucleus PLUS系统架构和组件
- Nucleus PLUS系统架构和组件
- Nucleus PLUS系统架构和组件
- Retrofit2+Rxjava2+nucleus5(简化Presenter)+ButterKnife(减少findViewById使用)
- Nucleus PLUS
- Nucleus学习
- nucleus学习
- 简化的enter转化成tab组件
- 用组件beanutils,dbutils简化JDBC操作
- 用组件beanutils,dbutils简化JDBC操作
- 用组件beanutils简化JDBC操作
- 使用EventBus解耦,简化组件通信
- 利用Jakarta Commons组件beanutils、dbutils简化JDBC数据库操作
- 牛B的Glide图片加载解析地址
- Java 向Hbase表插入数据报错(org.apache.hadoop.hbase.client.HTablePool$PooledHTable cannot be cast to org.apa)
- tomcat启动异常,Unable to load configuration.
- git远程删除分支后,本地git branch -a 依然能看到的解决办法
- BZOJ
- 简化Presenter,Nucleus组件
- hexo 学习链接
- Android Studio导入项目非常慢的解决办法
- 对象池
- 自然语言处理(一)
- N(8)皇后问题
- [已解决]软件测试:Jmeter运行错误
- 闲说HeartBeat心跳包和TCP协议的KeepAlive机制
- Arduino小车PID调速前期准备——码盘测速精度的提高