安卓中消息和字符串之间的java转换?
我正在尝试监视安卓上的网络连接。这不能在主线程上完成,因此数据收集发生在我生成的单独线程上,我正在学习使用Handler类每秒向UI报告。下面是我的代码的相关片段
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();
}
问题是,我从我生成的新线程中得到的消息是“String”类型的,但我似乎无法重载处理程序类中的handleMessage方法以获取字符串而不是消息。我不认为字符串和消息之间存在直接转换,因为消息类中唯一返回字符串的方法是toString()方法,但它返回的是描述,而不是消息包含的内容。我还对如何将字符串转换为消息感到困惑——我觉得我在做一个非常迂回的方法。任何帮助都将不胜感激
# 1 楼答案
您可以使用捆绑包将对象(如字符串)附加到消息对象
我创建了以下示例:
# 2 楼答案
您不必重载或尝试在
String
和Message
之间进行任何转换。 您应该做的是将该字符串放入Message类型的对象中,并将其发送到Handler
。然后在handleMessage()
中从消息中提取字符串大概是这样的:
在{}中:
但除此之外,程序还有一个问题:您将无法将数据发送到处理程序,因为该部分代码无法访问:
另外,不要忘记在某个时候停止
Thread
,否则即使在应用程序关闭后它也会继续运行