java事件,处理程序和监听器的问题

时间:2011-01-27 16:16:58

标签: java android events

编辑:在我的意见中,我实际上能够将其用于工作和形成一个很好的例子。接受的答案就是我的例子,如果您需要帮助或有建议,请随时发表评论。

我是java的新手,刚刚被介绍给事件,处理程序和监听器。我在网上找到了3个很好的参考资料,但是,我仍然没有看到我如何实现这个来解决我的问题。 (另外,这是在android上开发的。我怀疑这会改变这个例子,但我想我会告诉你)

指向我认为有帮助的网站的链接:
happy object
example depot
java world

这是我需要的,使用任意名称和示例,而不是在这里填写我的数百行代码:

以下是我的课程及其用途:
MainUI - 这会创建用户界面 连接 - 此类执行与套接字的连接并开始接收数据
DataRobot - 此类对收到的数据执行计算并决定如何处理 DataBuilder - 此类从数据机器人收集数据,一旦达到一定数量,它就会将该块发送到远程数据库
DataSender - 此类发送数据库发送给它的数据

我用线程来实现这个... =(
我认识的人建议我使用事件。他给了我一个很好的解释,然而,它是在30分钟内,我没有看到我如何能够实现它而没有看到一些更好的例子(他也是从C#背景说)。我想知道是否有一些有java方面经验的人可以使用我上面的内容并告诉我我需要做什么。

以下是我计划出的事件:
dataReceived - 此事件发生在connect中,此事件在此事件触发时连接接收数据时触发,它将数据发送到数据机器人handler()函数。
dataAnalyzed - 此事件发生在datarobot中,当datarobot完成处理提供给它的数据时会触发此事件,当此事件触发时,它会将数据发送到数据库中 dataBuilder - 此事件发生在databuilder中,当databuilder收到一定数量且准备好发送数据时会触发此事件,当此事件触发时,它会将数据发送到数据库。

我在这里寻找一个例子或至少讨论应该做些什么。我找到的一个例子是“happyfaceobject”的例子,它非常好。但是,我仍然无法在我的设计中实现它,因为我对java和事件非常新。请尽可能帮助我,我们将不胜感激。这个例子也可以帮助整个社区,因为缺少很棒的java事件示例。

提前致谢,如果您需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:6)

你是Java的新手 - 我认为你过于复杂,并试图一次吞下太多。

忘记你的宏伟设计。忘了UI。忘了Android吧。

从玩具问题开始并建立起来。

你能创建一个响应Event的侦听器类和生成器类来发送该事件吗?你能看到正在采取的行动吗?如果你不能这样做,你就不会走得太远。如果你有一个工作,移动到下一个,看看你是否可以让你的设计使用这些更简单的对象。只有当整个工作正常时,你才会担心绑定Android和UI元素。

从简单的POJO模型开始,你会更快。

答案 1 :(得分:1)

我有这个工作,这似乎是一个很好的例子。我将在下面发布代码,希望有一天它会帮助某人! = D如果你发现我做错了什么,或者知道更好的方法,请发表一些评论,以便我能纠正。感谢

基本上,您要创建的每个事件都需要事件对象侦听器接口 AddListener函数 RemoveListener函数 FireEvent功能监听器。所有这些都可以在下面的例子中看到。如果您有任何疑问,请在评论中发帖,如果这对您有所帮助,请随时提出建议! = P

/* SmartApp.java */
public class SmartApp extends Activity 
{
    private ConnectDevice cD = new ConnectDevice();
    private DataRobot dR = new DataRobot();
    private DataBuilder dB = new DataBuilder();
    private DataSender dS = new DataSender();
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.intro);

    cD.addDataReceivedListener(new DataReceivedListener() {
        @Override
        public void dataReceivedReceived(DataReceivedEvent event) {
            // TODO Auto-generated method stub
            dR.analyzeData(event.getData());
        }
    });
    dR.addDataAnalyzedListener(new DataAnalyzedListener() {
        @Override
        public void dataAnalyzedReceived(DataAnalyzedEvent event) {
            // TODO Auto-generated method stub
            dB.submitData(event.getData());
        }
    });
    dB.addDataBuilderListener(new DataBuilderListener() {
        @Override
        public void dataBuilderReceived(DataBuilderEvent event) {
            // TODO Auto-generated method stub
            dS.sendData(event.getData());
        }
    });
      }
}  

/* ConnectDevice.java
 * This class is implementing runnable because i have a thread running that is checking
 * the contents of a socket. Irrelevant to events. */
public class ConnectDevice implements Runnable {

    private List _listeners = new ArrayList();
    private String data;

    /* Constructor */
    public ConnectDevice() {// does some socket stuff here, irrelevant to the events}
    public void run() {// does some socket stuff here, irrelevant to the events}

    public synchronized void addDataReceivedListener(DataReceivedListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataReceivedListener(DataReceivedListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataReceivedEvent(String temp) {
        DataReceivedEvent dRE = new DataReceivedEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataReceivedListener)listeners.next()).dataReceivedReceived(dRE);
        }
    }
    public interface DataReceivedListener {
        public void dataReceivedReceived(DataReceivedEvent event);
    }
}  

/* DataRobot.java */
public class DataRobot {
    /* This class is for analyzing the data */
    private List _listeners = new ArrayList();
    private String data;
    public boolean analyzeData(String temp) {
        /* Analyze the data
         * This function analyzes the data, as explained in the OP
         * This function fires the analyzed data event when finished
             * analyzing the data.
         */
        data = temp;
        fireDataAnalyzedEvent(data); // this fires the dataanalyzedevent
        return true; //for now this will always return true
    }

    public synchronized void addDataAnalyzedListener(DataAnalyzedListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataAnalyzedListener(DataAnalyzedListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataAnalyzedEvent(String temp) {
        DataAnalyzedEvent dRE = new DataAnalyzedEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataAnalyzedListener)listeners.next()).dataAnalyzedReceived(dRE);
        }
    }
    public interface DataAnalyzedListener {
        public void dataAnalyzedReceived(DataAnalyzedEvent event);
    }
}  

/* DataBuilder.java */
public class DataBuilder {
    private List _listeners = new ArrayList();
    private String data;
    public boolean submitData(String temp) {
            /* Builds the data
             * This function builds the data, as explained in the OP
             * This function fires the databuilder data event when finished
                     * building the data.
             */
        data = temp;
        fireDataBuilderEvent(data); //firing the databuilder event when finished
        return true;
    }
    public synchronized void addDataBuilderListener(DataBuilderListener listener) {
        _listeners.add(listener);
    }
    public synchronized void removeDataBuilderListener(DataBuilderListener listener) {
        _listeners.remove(listener);
    }
    private synchronized void fireDataBuilderEvent(String temp) {
        DataBuilderEvent dRE = new DataBuilderEvent(this, temp);
        Iterator listeners = _listeners.iterator();
        while(listeners.hasNext()) {
            ((DataBuilderListener)listeners.next()).dataBuilderReceived(dRE);
        }
    }
    public interface DataBuilderListener {
        public void dataBuilderReceived(DataBuilderEvent event);
    }
}  

/* DataSender.java */
/* this class has no event, because it is done firing events at this point */
public class DataSender {
    private String data;
    public boolean sendData(String temp) {
        data = temp;
        return true;
    }
}  

下面是每个事件的事件对象。我将每个都定义在一个单独的文件中,不确定这是否是好的程序。

/* DataReceivedEvent.java */
public class DataReceivedEvent extends EventObject{
    private String data;
    public DataReceivedEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}  

/* DataAnalyzedEvent.java */
public class DataAnalyzedEvent extends EventObject{
    private String data;
    public DataAnalyzedEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}  

/* DataBuilderEvent.java */
public class DataBuilderEvent extends EventObject {
    private String data;
    public DataBuilderEvent(Object source, String temp) {
        super(source);
        // TODO Auto-generated constructor stub
        data = temp;
    }
    public String getData() {
            // this function is just an accessor function
        return data;
    }
}