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 }