Main アクティビティを、実行中のスレッドを持つ Java クラスに渡そうとしています。スレッドが呼び出されたら、何らかの作業を行って UI を更新するアクティビティ クラス内のいくつかのオブジェクトを参照する必要があります。私のコードは次のようになります。
/**
*
*/
public class MainActivity extends Activity {
Person person;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
person = new Person();
}
public void updateInfo(String action) {
person.setAction(action);
//redraw the person to the gui
ImageView image = (ImageView) findViewById(R.id.action);
int id = getResources().getIdentifier(person.getCurrentAction(),"drawable", getPackageName());
image.setImageResource(id);
}
}
/**
*
*/
public class ThreadClass {
private MainActivity mainActivity;
public SocketClient(MainActivity mainActivity) {
this.mainActivity = mainActivity;
new MyThread().start();
}
private class MyThread extends Thread {
public void run() {
try {
while(!isInterrupted() {
mainActivity.updateInfo("Person is running");
}
}
}
}
}
このようにすると、正しいスレッドでビューを更新していないというエラーが表示されます。android.View.ViewRoot$CalledFromWrongThreadException. ここで何が間違っていますか?また、他のすべてのロジックを削除する必要があったため、このコードは疑似コードをコンパイルしない可能性が高くなります。