简化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 } 
原创粉丝点击