private fun testing (data: CharSequence) {
runOnUiThread{
test!!.text = data
textView!!.append(data)
}
}
Два разных textView, называемых test и textView. Моя цель - использовать .text для печати переменной данных в textView. К сожалению, это не похоже на работу. Странно .append работает, но я хочу, чтобы данные печатались, а затем перезаписывались при любых новых изменениях.
Изображение моего приложения для более легкого понимания ситуации
Здесь на рисунке выше вы можете видеть, что второй textView работает нормально с .append. Но вышеприведенный textView, использующий .text, ничего не печатает? Почему эта
переменная данных поступает от Arduino Board. Вот мой код
var mCallback = UsbReadCallback { arg0 ->
//Defining a Callback which triggers whenever data is read.
var data: String? = null
try {
data = String(arg0, Charsets.UTF_8)
"$data/n"
testing(data)
tvAppend(textView, data)
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
}
Это как-то связано с CharSequence? Может кто-нибудь помочь
Вот мой XML файл:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".Surfboard"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/surfboard"
>
<!--Table Layout with 3 rows and each row with 3 buttons-->
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:rowCount="3"
android:columnCount="3"
android:padding="8dp"
>
<Button
android:id="@+id/buttonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickStart"
android:text="@string/Begin"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/statusText"
android:layout_below="@+id/buttonSend"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true" />
<!--Row 1-->
<TableRow>
<Button
android:id="@+id/b00"
style="@style/Widget.AppCompat.Button"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:gravity="center"
android:background="@color/colorAccent"
android:textColor="#FFFFFF"
android:textSize="22sp" />
<Button
android:id="@+id/b01"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="8dp"
android:background="@color/colorAccent"
android:gravity="center"
android:textColor="#FFFFFF"
android:textSize="22sp" />
<Button
android:id="@+id/b02"
android:layout_width="80dp"
android:layout_height="80dp"
android:textSize="22sp"
android:textColor="#FFFFFF"
android:background="@color/colorAccent"
android:gravity="center"
android:layout_margin="8dp"
style="@style/Widget.AppCompat.Button"
/>
</TableRow>
<Button
android:id="@+id/activate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activate"
android:onClick="onClickSend"
tools:ignore="OnClick" />
<Button
android:id="@+id/deactivate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClickStop"
android:text="@string/deactivate"/>
<TextView
android:id="@+id/test"
android:layout_width="wrap_content"
android:background="#E0E0E0"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_below="@+id/buttonSend"
android:layout_marginTop="20dp"
android:background="#E0E0E0" />
</TableLayout>
</RelativeLayout>
Вот я, инициирующий TextViews:
var textView: TextView? = null
var textView2: TextView? = null
textView = findViewById<View>(R.id.textView) as TextView
textView2 = findViewById<View>(R.id.test) as TextView
Вот также видео, чтобы помочь объяснить : https://youtu.be/LaMsjB7v5WI
Вот мой tvAppend:
private fun tvAppend(tv: TextView?, text: CharSequence) {
runOnUiThread {
//tv!!.append(text)
}
}
В основном так же, как функция проверки (). Это ничего не делает, я прокомментировал действие.
Возможно, я должен предоставить весь свой код:
package com.example.surf10
import android.graphics.Color
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_surfboard.*
import android.app.Activity
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.hardware.usb.UsbDevice
import android.hardware.usb.UsbDeviceConnection
import android.hardware.usb.UsbManager
import android.util.Log
import android.widget.EditText
import android.widget.TextView
import com.felhr.usbserial.UsbSerialDevice
import com.felhr.usbserial.UsbSerialInterface
import com.felhr.usbserial.UsbSerialInterface.UsbReadCallback
import kotlinx.android.synthetic.main.activity_surf_board2.*
import java.io.UnsupportedEncodingException
class Surfboard : AppCompatActivity() {
val ACTION_USB_PERMISSION = "com.hariharan.arduinousb.USB_PERMISSION"
var startButton: Button? = null
var sendButton: Button? = null
var stopButton: Button? = null
var textView: TextView? = null
var textView2: TextView? = null
var statusText: TextView? = null
var usbManager: UsbManager? = null
var device: UsbDevice? = null
var serialPort: UsbSerialDevice? = null
var connection: UsbDeviceConnection? = null
var mCallback = UsbReadCallback { arg0 ->
//Defining a Callback which triggers whenever data is read.
var data: String? = null
try {
data = String(arg0, Charsets.UTF_8)
"$data/n"
testing(data)
tvAppend(textView, data)
} catch (e: UnsupportedEncodingException) {
e.printStackTrace()
}
}
private val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() {
//Broadcast Receiver to automatically start and stop the Serial connection.
override fun onReceive(
context: Context,
intent: Intent
) {
if (intent.action == ACTION_USB_PERMISSION) {
val granted = intent.extras!!.getBoolean(
UsbManager.EXTRA_PERMISSION_GRANTED
)
if (granted) {
connection = usbManager!!.openDevice(device)
serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection)
if (serialPort != null) {
if (serialPort!!.open()) { //Set Serial Connection Parameters.
setUiEnabled(true)
serialPort!!.setBaudRate(9600)
serialPort!!.setDataBits(UsbSerialInterface.DATA_BITS_8)
serialPort!!.setStopBits(UsbSerialInterface.STOP_BITS_1)
serialPort!!.setParity(UsbSerialInterface.PARITY_NONE)
serialPort!!.setFlowControl(UsbSerialInterface.FLOW_CONTROL_OFF)
serialPort!!.read(mCallback)
tvAppend(statusText, "Serial Connection Opened!\n")
} else {
Log.d("SERIAL", "PORT NOT OPEN")
}
} else {
Log.d("SERIAL", "PORT IS NULL")
}
} else {
Log.d("SERIAL", "PERM NOT GRANTED")
}
} else if (intent.action == UsbManager.ACTION_USB_DEVICE_ATTACHED) {
onClickStart(startButton)
} else if (intent.action == UsbManager.ACTION_USB_DEVICE_DETACHED) {
onClickStop(stopButton)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_surfboard)
usbManager = getSystemService(Context.USB_SERVICE) as UsbManager
startButton = findViewById<View>(R.id.buttonStart) as Button
sendButton = findViewById<View>(R.id.activate) as Button
stopButton = findViewById<View>(R.id.deactivate) as Button
textView = findViewById<View>(R.id.textView) as TextView
textView2 = findViewById<View>(R.id.test) as TextView
statusText = findViewById<View>(R.id.statusText) as TextView
setUiEnabled(false)
val filter = IntentFilter()
filter.addAction(ACTION_USB_PERMISSION)
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED)
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED)
registerReceiver(broadcastReceiver, filter)
}
fun setUiEnabled(bool: Boolean) {
startButton!!.isEnabled = !bool
sendButton!!.isEnabled = bool
stopButton!!.isEnabled = bool
textView!!.isEnabled = bool
textView2!!.isEnabled = bool
}
fun onClickStart(@Suppress("UNUSED_PARAMETER")view: View?) {
val usbDevices = usbManager!!.deviceList
if (!usbDevices.isEmpty()) {
var keep = true
for ((_, value) in usbDevices) {
device = value
val deviceVID = device!!.vendorId
if (deviceVID == 0x2341) //Arduino Vendor ID
{
val pi =
PendingIntent.getBroadcast(this, 0, Intent(ACTION_USB_PERMISSION), 0)
usbManager!!.requestPermission(device, pi)
keep = false
} else {
connection = null
device = null
}
if (!keep) break
}
}
}
fun onClickSend(@Suppress("UNUSED_PARAMETER")view: View?) {
val string = "g"
serialPort!!.write(string.toByteArray())
//tvAppend(textView, "\nData Sent : " + string)
}
fun onClickStop(@Suppress("UNUSED_PARAMETER")view: View?) {
setUiEnabled(false)
serialPort!!.close()
tvAppend(textView, "\nSerial Connection Closed! \n")
}
private fun tvAppend(tv: TextView?, text: CharSequence) {
runOnUiThread {
//tv!!.append(text)
}
}
private fun testing (data: CharSequence) {
runOnUiThread{
textView!!.text = data.toString() <---- THIS DOES NOT WORK
textView2!!.append(data)
}
}
}