[英]NoClassDefFoundError on implementing Runnable class in android studio
[英]Accessing to TextView from class implementing Runnable - Android Studio
我有一個 class ExampleRunnable,它在某些限制下調用方法來更改值百分比和 TextView,它將在設置可見性一行之后顯示它。 我試圖顯示這個值,直到我不會停止這個線程。
我的應用程序凍結,因為我無法訪問 TextView。是否有任何解決方案,可以訪問對它們進行操作?
總機 class:
public class ScooterDashboard extends AppCompatActivity implements LocationListener {
TextView textViewBatteryPercentage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scooter_dashboard);
textViewBatteryPercentage = findViewById(R.id.textViewBatteryPercentage);
batBluetooth = findViewById(R.id.startBatteryMeasurement);
batBluetooth.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
stopThread(view);
return true;
}
});
batBluetooth.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.R)
@Override
public void onClick(View view) {
if(stopThread){
startThread(view);
textViewBatteryDistance.setText(Double.toString(batteryDistance));
textViewBatteryPercentage.setText(Double.toString(batteryPercentage));
}
}
});
}
...
public void startThread(View view) {
stopThread = false;
ExampleRunnable runnable = new ExampleRunnable();
new Thread(runnable).start();
}
public void stopThread(View view) {
stopThread = true;
}
class ExampleRunnable extends ScooterDashboard implements Runnable {
@Override
public void run() {
while (!stopThread){
//do while/try/catches...
...
if(currentBatteryVoltage > 0 && batterySettingsDefined){
setTextBattery(); <- PROBLEM
}
//more try/catches...
}
}
}
private void setTextBattery() {
setBatteryPercentage();
...
}
private void setBatteryPercentage() {
double percentage = ((currentBatteryVoltage - bottomCutOffX) * 100) * (upperCutOffX - bottomCutOffX);
textViewBatteryPercentage.setText(Double.toString(batteryPercentage)); <- problem here
textViewBatteryPercentage.setVisibility(View.VISIBLE); <- problem here
if(percentage > 90){
batBluetooth.setImageResource(R.drawable.bat100);
}
...
batteryPercentage = percentage; //not important, its value in ScooterDasboard, i omitted many in this code example
}
}
runOnUiThread(()->{
textViewBatteryPercentage.setText(Double.toString(batteryPercentage));
textViewBatteryPercentage.setVisibility(View.VISIBLE);
})
用上面的代碼替換您設置的文本。Ui 組件無法在單獨的線程內訪問。UI 只能在 UI 線程內訪問。 如果您需要在單獨的線程中訪問 UI 組件,請使用上面的代碼。
如果您在片段中,請按以下方式使用
getActivity().runOnUiThread(()->{
//put your UI access code here
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.