从另一个线程更改UI



已更新:我更新了一些日志输入,感谢您的帮助。

我正在应用以下代码:

@Override
public void run() {
     byte[] bytes = null;
     int TIMEOUT = 5000;
     int status = connection.bulkTransfer(ep, bytes, ep.getMaxPacketSize(), TIMEOUT);
     Log.d(TAG, "status: " + status);
     write_to_screen( bytes );
}
public void write_to_screen( byte[] bytes  ) {
    Log.d(TAG, "bytes: " + bytes);
    String str_non_final = null;
    try {
        str_non_final = new String( bytes, "UTF-8");
        Log.d(TAG, "str_non_final : " + str_non_final );
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }   
    final String str = str_non_final;
    Log.d(TAG, "str: " + str);
    runOnUiThread(new Runnable() {@Override public void run()
    {
       textView7.setText( str );
       Log.d(TAG, "UI updated");
    }
    });
}   

logcat的结果如下:

D/EthernetActivity(15721): open SUCCESS

D/EthernetActivity(15721): status: -1

D/EthernetActivity(15721): bytes: null

所以在我看来,问题是在"str_non_final = new String(bytes, "UTF-8");"。这有什么不对吗?

str_non_final = new String( bytes, "UTF-8");

您正在使用字节,并且在日志记录中打印为null。所以它会抛出NullPointerException,而你的catch只能处理UnsupportedEncodingException

确保bytes在调用

之前不为空
write_to_screen( bytes );

相关内容

  • 没有找到相关文章

最新更新