0
제목과 마찬가지로 MainActivity 클래스가있는 Android 프로젝트에 메시지를받은 후 텍스트를 설정하려는 TextView가 있습니다. 또한 표시하려는 문자열 메시지를받는 별도의 스레드에서 ServerSocket을 실행하는 클래스가 있습니다. 내 MainActivity의보조 스레드의 주 스레드에서 인수가있는 호출 방법
일부는 다음과 같습니다
private Handler UIHandler = new Handler();
private RemoteControlServer remoteConnection;
public static final int controlPort = 9090;
public class MainActivity extends Activity implements SensorEventListener
{
...
remoteConnection = new RemoteControlServer(controlPort, UIHandler);
...
private class RemoteControlServer extends RemoteControl
{
RemoteControlServer(int port, Handler ui)
{
super(port, ui);
}
@Override
public void onReceive(String[] msg)
{
//updates messages textview
}
@Override
public void onNotify(String[] msg)
{
//updates notification textview
}
}
}
onReceive (문자열 [] MSG)를 호출하고 또한 다른 스레드에서 메시지를 수신하면 다음과 같습니다 처리하는 코드의 RemoteControlServer 구현,
...
public abstract void onReceive(String[] msg);
public abstract void onNotify(String[] msg);
...
controlListener = new Thread(new Runnable()
{
boolean running = true;
public void run()
{
String line = null;
while(running)
{
try
{
//Handle incoming messages
...
onReceive(messages);
}
catch (final Exception e)
{
UIHandler.post(new Runnable()
{
public void run()
{
onNotify("Wifi Receive Failed " + e.toString() + "\n");
}
});
}
}
}
});
...
"뷰 계층 구조를 만든 원래 스레드 만 해당 뷰를 만질 수 있습니다."라는 오류가 나타납니다. onReceive()가 호출 될 때 예외를 던지고 onNotify()를 예외 설명과 함께 호출합니다. 왜 onNotify()는 작동하지만 다른 하나는 작동하지 않습니까? 어떻게하면 청취자를 TextView로 올바르게 호출하고 텍스트를 업데이트 할 수 있습니까? 감사합니다
이 코드는 현재 사용중인 새 Thread() 코드를 대체합니까? 내가 틀렸다면 정정하되,이 작업을 내 UI 스레드에서 내 ServerSocket을 실행하지 않을 것입니까? – anders
TextView에 표시하려는 String을받을 때 ... 그냥 코드를 복사하고 setText를 textview에서 호출합니다. (위의 코드에서 // 텍스트를 설정합니다) ... 당신이 메시지를 받기 위해 구현 한 다른 스레드의 UI 스레드 (UI 스레드는 사용자 인터페이스에서 작동 할 수 있고 원하는 것)를 호출합니다. :) 나는 EN에 그다지 좋지 않다./ –
제안에 대한 Matej에게 감사의 말을 전한다. 약간의 시도를 해 줄 것이다. – anders