Android プロジェクトの目的は、ハードウェア デバイスからデータを読み取り、UI で更新することです。ここで、バックグラウンド スレッドによってデータを受信するコードをカプセル化し、このカプセル化されたクラスからデータを取得するための関数を他のクラスに提供する必要があります。以下は、このカプセル化されたクラスの私のコードです。
public class getDataFromUSB{
private AtomicInteger usb_data = new AtomicInteger():
private Random random;
private Thread thread = new Thread(){
@override
public void run(){
while(!Thread.currentThread().isInterrupted()){
synchronized(usb_data){
usb_data.set(read_usb());
usb_notify();
}
}
};
public void start(){
thread.start();
}
public int get_data(){
int ret_data=0;
synchronized(usb_data){
try{
usb_data.wait();
}catch(InterruptedException e){}
ret_data=usb_data.get();
}
return ret_data;
}
public int read_usb(){
return random.nextInt();
}
}
メインのアクティビティ クラスでは、USB のデータをリアルタイムで取得し続け、それを UI のテキストビューに入れたいと考えています。したがって、このクラスを次のように呼び出します。
final getDataFromUSB usb1=new getDataFromUSB();
usb1.start();
for(;;){
myTextView.setText(String.valueof(usb1.get_data()));
}
ただし、myTextView には何も表示されません。しかし、私がそれをテストすると
for(;;){
Log.d(TAG,"data="+usb1.get_data());
}
ログで常にリアルタイムの値を取得できます。誰でもこの問題について助けることができますか? または、この種の機能をカプセル化し、リアルタイム データを提供できる get_data() のような単純な関数を提供するより良いアイデアがある場合は、お知らせください。