pro*_*007 4 java events android
编辑:我实际上能够让这个工作和形成,在我的意见中,一个很好的例子.接受的答案就是我的例子,如果您需要帮助或有建议,请随时发表评论.
我是java的新手,刚刚被介绍给事件,处理程序和监听器.我在网上找到了3个很好的参考资料,但是,我仍然没有看到我如何实现这个来解决我的问题.(另外,这是在android上开发的.我怀疑这会改变这个例子,但我想我会告诉你)
这是我需要的,使用任意名称和示例,而不是在这里填写我的数百行代码:
以下是我的类及其用法:
MainUI - 这将创建UI
Connect - 此类执行与套接字的连接并开始接收数据
DataRobot - 此类对接收的数据执行计算并决定如何处理它
DataBuilder - 这class从数据机器人收集数据,一旦达到一定数量,它就会将该块发送到远程数据库
DataSender - 该类发送数据库发送给它的数据
我用线程来实现这个... =(
我知道有人建议我使用事件.他给了我一个很好的解释,但是,它在30分钟内,我看不出如何实现它而没有看到一些更好的例子(他也是在C#背景下发言.我想知道在那里有一些java经验的人是否可以使用我上面的东西并告诉我我需要做什么.
以下是我计划出来的事件:
dataReceived - 此事件发生在connect中,当此事件触发时,当connect接收数据时,此事件将触发,它将数据发送到数据机器人handler()函数.
dataAnalyzed - 这个事件发生在datarobot中,当datarobot完成处理给它的数据时会触发此事件,当此事件触发时它会将数据发送到databuilder
dataBuilder - 此事件发生在databuilder中,当databuilder收到此事件时会触发此事件一定数量并准备发送数据,当此事件触发时,它将数据发送到数据库.
我在这里寻找一个例子或至少讨论应该做些什么.我找到的一个例子是"happyfaceobject"的例子,它非常好.但是,我仍然无法在我的设计中实现它,因为我对java和事件非常新.请尽可能帮助我,我们将不胜感激.这个例子也可以帮助整个社区,因为缺少很棒的java事件示例.
在此先感谢,如果您需要更多信息,请告诉我们.
你是Java的新手 - 我认为你过于复杂,并试图一次吞下太多.
忘记你的宏伟设计.忘了UI.忘了Android吧.
从玩具问题开始并建立起来.
你能创建一个响应Event的侦听器类和生成器类来发送该事件吗?你能看到正在采取的行动吗?如果你不能这样做,你就不会走得太远.如果你有一个工作,移动到下一个,看看你是否可以让你的设计使用这些更简单的对象.只有当整个工作正常时,您才会担心绑定Android和UI元素.
从简单的POJO模型开始,您将获得更快的速度.
我已经完成了这个工作,这似乎是一个很好的例子。我将在下面发布代码,希望有一天它会对某人有所帮助!=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());
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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);
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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);
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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);
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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;
}
}
Run Code Online (Sandbox Code Playgroud)
下面是每个事件的事件对象。我将其中的每一个都定义在一个单独的文件中,不确定这是否是一个好的过程。
/* 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;
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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;
}
}
Run Code Online (Sandbox Code Playgroud)
/* 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;
}
}
Run Code Online (Sandbox Code Playgroud)