簡體   English   中英

自定義監聽器

[英]Custom Listener

我正在研究聊天應用程序。 目前,我確實喜歡那樣,當我打開ChatActvity時,所有套接字都已注冊並且聊天有效。。。現在我想更改編碼結構。.我想在一個類中而不是在Activity類中打開該套接字,我需要向該類添加一個偵聽器。 我如何實現這個..?

private class Chatroom {
    private static void initialise() {
        // Initialising the sockets and registering listeners to each socket
    }
}

我想在活動類中通知Chatroom類中的套接字偵聽器被調用時。

這可能是您需要的:

    public class RequestSender extends AsyncTask<String, Void, String> {

    private final static String serverIP = "192.168.1.1";
    private final static Integer serverPort = 1234;
    private ServerResponseListener listener = null;

    public void setServerResponseListener(ServerResponseListener listener){
         this.listener=listener;
    }

    public interface ServerResponseListener {
         public void onResponseReceive(String response);
    }


    @Override
    protected String doInBackground(String... params) {
        Socket socket = null;
        try {
             socket = new Socket(serverIP, serverPort);
        } catch (IOException e) {
             // return "server is unreachable" message or something
        }

        PrintWriter requestWriter = new PrintWriter(socket.getOutputStream());
        BufferedReader resultReader = new BufferedReader(new InputStreamReader(
        socket.getInputStream()));
        String request = params[0] //for example
        requestWriter.println(request);
        requestWriter.flush();
        String result = null;
        while ((result = resultReader.readLine()) != null) {}
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        listener.onResponseReceive(result);
    }

}

這是如何從Activity中執行AsynchTask的示例:

public class MainActivity extends Activity{
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         RequestSender requestSender = new RequestSender();
         requestSender.setServerResponseListener(new RequestSender.ServerResponseListener(){
             @override
             public void onResponseReceive(String response){
                 //
             }
         });
         requestSender.execute("message");
     }
}

閱讀此內容: http : //developer.android.com/reference/android/os/AsyncTask.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM