我正在尝试在Android操作系统中创建一个简单的客户端套接字,并在网上搜索材料时,我偶然发现了一个例子(不是很好写,因为它有一些错误和一个无限循环,但确实如此它的工作是一个简单的例子,其中有一部分代码我无法理解,所以我想也许这个社区可以帮助我,并阐明为什么整个听众部分在那里,它的目的是什么? 以下是有关该侦听器的代码部分:
public interface OnListener {
void listenerMethod(String text);//never invoked pretty much
}
public class ClientTask extends AsyncTask<String, String, String> implements OnListener {
@Override
public void listenerMethod(String text) {//this gets executed after send(View v) method, 'text' String variable contains the msgToSend from phone (from textfield above SEND button)
sendMessage(text);//invoked by onStop with String variable == "bye"... and it gets stucked in a loop at this point
}
}
private ClientTask myClientTask;
private OnListener listener;
public void addListener(OnListener listenerToAdd) {//this method is invoked by send(View v)
this.listener = listenerToAdd;
}
public void send(View v) {//invoked when you press the Send button, empty strings do not get sent (they stop at a trycatch and don't execute any network thingies)
addListener(myClientTask);//why does it add listener each time a msg is sent?
if (listener != null)
listener.listenerMethod(((EditText) findViewById(R.id.editText_MsgToSend)) //this here gets the msg you typed into the editable textfield above SEND button
.getText().toString());
}
@Override
protected void onStop() {//Restart button invokes this
try {
if (listener != null)
listener.listenerMethod("bye");
clientSocket.close();
} catch (Exception e) {
// TODO: handle exception
}
super.onStop();
}
答案 0 :(得分:0)
这是回调模式,好莱坞原则“不要打电话给我,我会打电话给你”。首先,它定义了类OnListener
实现的接口ClientTask
,并为其提供了实现。现在ClientTask既是ClientTask类类型又是OnListener类型。 addListener方法只能通过类型为ClientTask
的{{1}},因为它实现了该接口,这意味着我们可以访问方法的实现
OnListener
稍后我们只调用listenerMethod(String string)
,它接受编辑文本中的任何字符串,然后转到实现OnListener的类(即我们的ClientTask),并发送带有EditText
因此,每次调用send(View v)时,ClientTask中的listenerMethod(String文本)也会被执行。