简化Presenter,Nucleus组件

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.    @Override
6.    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.                @Override
16.                public void call(ServerAPI.Response response) {
17.                    getView().onItemsNext(response.items);
18.                }
19.            }, new Action1<Throwable>() {
20.                @Override
21.                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.    @Override
34.    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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值