6

我即将开始开发 Android 应用程序。我有兴趣在我的应用程序中使用 Otto 或 EventBus 来协助进行异步 REST 网络调用并在调用返回时通知主线程。我在研究期间发现使用这些总线的一个主要缺陷是通常需要创建太多的事件类。是否有任何模式或方法来减少必须使用的事件类的数量?

4

1 回答 1

6

这个概念

我解决事件类过多问题的最佳方法是使用静态嵌套类。您可以在此处阅读有关它们的更多信息。

现在在这里使用上述概念是解决问题的方法:

所以基本上假设你有一个名为 Doctor 的类,你用它来创建一个你在应用程序中传递的对象。但是,您希望通过网络发送相同的对象并在该对象的上下文中检索 JSON,并将其反馈给订阅者以执行某些操作。您可能会创建2 个类

  1. DoctorJsonObject.java包含有关返回的 JSON 数据的信息和
  2. DoctorObject.java包含您在应用程序中传递的数据。

你不需要这样做。 而是这样做:

public class Doctor{
    static class JSONData{
        String name;
        String ward;
        String id;
      //Add your getters and setter
    }
    
    static class AppData{
     public AppData(String username, String password){
       //do something within your constructor
      }
       String username;
       String password;
    //Add your getters and setters
    }
}

现在你有一个 Doctors 类,它封装了发往网络的事件和从网络返回的事件。

  1. Doctor.JSONData表示从网络返回的 Json 格式的数据。

  2. Doctor.AppData表示在应用程序中传递的“模型”数据。

要将类的 AppData 对象用于发布事件:

/*
 You would post data from a fragment to fetch data from your server.
 The data being posted within your app lets say is packaged as a doctor 
 object with a doctors username and password.
*/

public function postRequest(){
  bus.post(new Doctor.AppData("doctors_username","doctros_password"));
}

您实现中的订阅者侦听此对象并发出 http 请求并返回 Doctor.JSONData:

/*
retrofit implementation containing
the listener for that doctor's post 
*/
    @Subscribe
    public void doctorsLogin(Doctor.AppData doc){
//put the Doctor.JSONObject in the callback
        api.getDoctor(doc.getDoctorsName(), doc.getPassWord(), new Callback<Doctor.JSONObject>() {
            @Override
            public void success(Doctor.JSONObject doc, Response response) {
                bus.post(doc);
            }

            @Override
            public void failure(RetrofitError e) {
              //handle error
            }
        });
    }
}

通过上述实现,您已将所有与 Doctor Object 相关的事件封装在ONE Doctor 类中,并使用静态内部类在不同时间访问您需要的不同类型的对象。更少的类更多的结构。

于 2015-08-07T12:11:47.257 回答