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;
это установит это как нуль