У меня есть эта настройкаКонтекст активности доступа из управляемого интерфейса
Класс MainActivity создает BTHandler, который является классом полезности. Он передает контекст активности и контекст приложения.
public class MainActivity extends Activity implements View.OnClickListener{
protected void onCreate(Bundle savedInstanceState) {
...
currentBT = new BTHandle(this, MainActivity.this);
}
public Handler handler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
...
super.handleMessage(msg);
}
};
}
Это класс Утилии. Он использует оба контекста для некоторых вычислений, и когда требуется создание ConnectThread, для запуска соединения с устройством BT. Он передает контекст активности, поэтому ConnectThread может отправлять сообщение через обработчик.
class BTHandle {
private final Context mainActivityContext;
private final Activity mainActivity;
...
public BTHandle(final Context context, final Activity activity){
mainActivityContext = context;
mainActivity = activity;
}
f(){
ConnectThread connectAsClient = new ConnectThread(mainActivityContext, BTDevice, mBluetoothAdapter, BTUuid);
new Thread(connectAsClient).start();
}
}
И, наконец, здесь возникает ошибка. Это ConnectThread. Я хочу отправить сообщение отсюда в MainActivity. Но компилятор говорит, что он не справляется с обработчиком. Поэтому я догадываюсь, что контекст не возникает.
public class ConnectThread implements Runnable {
private final Context mainActivity;
public ConnectThread(Context context, BluetoothDevice device, BluetoothAdapter adapter, UUID BT_UUID) {
...
mainActivity = context;
}
@Override
public void run() {
...
Message completeMessage = mainActivity.handler.obtainMessage(555, "CONNECTED");
completeMessage.sendToTarget();
}
}
Как передать контекст правильно, чтобы ConnectThread мог видеть обработчик?
Какое сообщение об ошибке? Из того, что я вижу, вы пытаетесь ссылаться на обработчик из объекта Context. Ваш 'Handler' является частью вашего' MainActivity' – Stefan
'handler' не является членом класса Context. Если вы хотите получить доступ к этому полю, вам нужно будет направить свою 'mainActivity' в' MainActivity'. –
О, я вижу ошибку. Я неправильно понял. обработчик не является частью класса контекста. @Stefan ошибка: не удается найти обработчик символьной переменной. Итак, как ConnectThread мог видеть обработчик в mainActivity. –