Android обработчик nullpointexception

Вопрос об Android-обработчике

Я создал отдельный файл потока

Обратитесь к теме в другой деятельности.

Существует проблема при попытке изменить пользовательский интерфейс с помощью обработчика.

Эта часть нулевая.

Message hdmsg= handler.obtainMessage();

Я не знаю, какая часть является проблемой.

ClientThread.java

public class ClientThread extends Thread{
    public ClientThread() {
    }
    public void run(){
        try{
            Thread currThread = Thread.currentThread();
            while (currThread == thisThread) {

                String recvData = ct_in.readUTF();

                StringTokenizer st = new StringTokenizer(recvData, SEPARATOR);
                int command = Integer.parseInt(st.nextToken());
                switch (command) {
                    case MDY_WAITINFO: {
                        StringTokenizer st1 = new StringTokenizer(st.nextToken(), DELIMETER);
                        StringTokenizer st2 = new StringTokenizer(st.nextToken(), DELIMETER); 
                                    /* 
                                     code~ 
                                    */
                        Message hdmsg= handler.obtainMessage();
                        hdmsg.obj=st;
                        handler.sendMessage(hdmsg);

                        break;
                    }
                }
            }
        } catch (IOException e) {
            System.out.println(e);
            release();
        }
    }
}

RoomList.java

public class HostRoomListActivity extends AppCompatActivity {
    public static Handler handler;
    protected void onCreate(Bundle savedInstanceState) {
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SocketHostRoom client = new SocketHostRoom();
            client.start();
            handler = new Handler(){
                public void handleMessage(Message msg){
                    String txtmsg = msg.obj.toString();
                }
            };
        }
        class SocketHostRoom extends Thread{
            public void run(){
                ClientThread thread = new ClientThread();
                thread.start();
                thread.requestHostRoomList();
            }
        }
    }
}

1 ответ

Попробуйте позвонить HostRoomListActivity.handler.obtainMessage(); вместо простоhandler.obtainMessage();

Извините за путаницу, это все еще нужно называть так, но вы также звоните SocketHostRoom client = new SocketHostRoom(); прежде чем вы установите обработчик

       handler = new Handler(){ 
              public void handleMessage(Message msg){ 
                         String txtmsg = msg.obj.toString();  
              } 
       };

Попробуйте сначала установить обработчик, причина в том, что проблема заключается в том, что при вызове public static Handler handler; это установит это как нуль

Другие вопросы по тегам