Java – Android service activity 2 mode communication

In my team's Android application, I have a service running from startup. It communicates with the server to perform operations such as logging in, registering, chatting between phones and updating the phone database

I need to make my service communicate with two-way activities: for example, I am processing login activities, the user name and password are strings obtained from the text fields on the application screen, and I have been able to send authorization commands to the server through them

public void loginPressed(View v){
    usernameStr = usernameField.getText().toString();
    passwordStr = passwordField.getText().toString();

    if (!bound) return;
    Bundle b = new Bundle();
    Message msg = Message.obtain(null,ChatService.LOGIN);
    try {
        b.putString("username",usernameStr);
        b.putString("password",passwordStr);
        msg.setData(b);
        messenger.send(msg);
    }
    catch (remoteexception e) {

    }

It can work as I expected When the server responds to a message indicating whether the login is successful, I need it to pass the message back to the activity so that I can start the main activity. If it is successful or prompt to re-enter, if not

I try to use MSG Replyto field to get the return messenger to send back information, but when I run the application, it will close abnormally with a null pointer. I don't know why this happens This code seems to be the culprit:

private class IncomingHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch(msg.what) {
        case LOGIN:

            Bundle b = msg.getData();
            String username = b.getString("username");
            String password = b.getString("password");

            String loginMessage = TCPCall.login(username,password);
            connection.sendMessage(loginMessage);

            String loginReturn = connection.retrieveMessage();
            Message m;

            Scanner s = new Scanner(loginReturn);
            s.useDelimiter(",");
            String c = s.next();
            String status = s.next();
            String message = s.next();

            if (status.equals("OK")) {
                m = Message.obtain(null,LoginActivity.OK);
                try {
                    msg.replyTo.send(m);
                } catch (remoteexception e) {}
            }
            else {
                m = Message.obtain(null,LoginActivity.ERR);
                try {
                    msg.replyTo.send(m);
                } catch (remoteexception e) {}
            }
            break;

The null pointer appears to come from

msg.replyTo.send(m);

Code lines in two cases (login success and login failure)

Any help in solving this problem will be appreciated:)

Solution

As Greg pointed out in his comments You need to set MSG replyTo = messenger; Int where he sent the original mail

An example can be found here: http://www.survivingwithandroid.com/2014/01/android-bound-service-ipc-with-messenger.html

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>