Я пытаюсь контролировать подключение к сети на Android. Это невозможно сделать в основном потоке, поэтому сбор данных происходит в отдельном потоке, который я создаю, - и я изучаю, как использовать класс Handler для отправки отчетов в пользовательский интерфейс каждую секунду. Вот соответствующие фрагменты моего кода ...Преобразование между сообщением и строкой в android?
public class MainActivity extends Activity {
private TextView textView;
private int linkSpeed;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Message message = msg;
textView.setText(message);
setContentView(textView);
}
};
/** Called when the activity is created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setTextSize(25);
Thread thread = new Thread() {
public void run() {
for (;;) {
try {
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
while (true)
{
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo != null) {
linkSpeed = wifiInfo.getLinkSpeed(); //measured using WifiInfo.LINK_SPEED_UNITS
}
else {
linkSpeed = -1;
}
}
String message = "linkSpeed = " + linkSpeed;
handler.handleMessage(message);
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
};
thread.start();
}
Проблема заключается в том, сообщение, которое я получаю от нового потока I нерест имеет тип «String», но я не могу перегрузить метод handleMessage в обработчике класс, чтобы принимать строки вместо сообщений. Я не думаю, что существует прямая конверсия между строками и сообщениями, поскольку единственным методом класса Message, возвращающим String, является метод toString(), но он возвращает описание, а не то, что содержит сообщение. Я также смущен тем, как я могу преобразовать String в Message - и я чувствую, что делаю очень окольный подход. Любая помощь будет принята с благодарностью!
Я получил его для работы. Это было очень просто и полезно, спасибо! Я фактически не использовал класс обработчика, я просто вызвал runOnUiThread в блоке try, чтобы отображать тексты из основного потока. –