Android внутри Network Callback: внешняя переменная не найдена - PullRequest
0 голосов
/ 31 октября 2018
   public class VideoCallActivity extends AppCompatActivity {

    private Room room; 
    private InstantConference instantConference;
    private TextView meetingAlert;
    private FloatingActionButton connectActionFab ;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_call);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        init(); 
        if (!checkPermissionForCameraAndMicrophone()) {
            requestPermissionForCameraAndMicrophone();
        } else {
            createAudioAndVideoTrack();
        }
    }

    private void init()  
        connectActionFab = findViewById(R.id.fbEndCall); 
    }



    public void goOnline() {
        try {
            URI uri = new URI(AppConfig.get().getSocketEndpoint());
            CNMApplication.getInstance().openSocket(uri);
            bindEvents();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void bindEvents() { 

        NirvorWebSocketAdapter.getCurrentAdapter().subscribeEvent(MessageType.MeetingStarted, item -> {
            runOnUiThread(() -> startMeeting());
        });
        NirvorWebSocketAdapter.getCurrentAdapter().subscribeEvent(MessageType.DuplicatePerformer, item -> {
            runOnUiThread(() -> {
                Toast.makeText(VideoCallActivity.this, "You are already is this meeting", Toast.LENGTH_LONG).show();
            });
        });

    }

    private void startMeeting() {
        if (checkPermissionForCameraAndMicrophone()) {
            meetingAlert.setVisibility(View.GONE);
            connectToRoom("sdfsdfsdf");
        }
    } 

    private void connectToRoom(String accessToken) {
        configureAudio(true);
        ConnectOptions.Builder connectOptionsBuilder = new ConnectOptions.Builder(accessToken);

        if (localAudioTrack != null) {
            connectOptionsBuilder.audioTracks(Collections.singletonList(localAudioTrack));
        }

        if (localVideoTrack != null) {
            connectOptionsBuilder.videoTracks(Collections.singletonList(localVideoTrack));
        }
        room = Video.connect(this, connectOptionsBuilder.build(), roomListener());
        setDisconnectAction(accessToken);
    }

    private void setDisconnectAction(final String accessToken) { 
        connectActionFab.setOnClickListener(view -> {
            if (room != null) {
                room.disconnect();
                goOffline();
                room = null;
                connectActionFab.setBackgroundColor(Color.GREEN);
                if (!isHost) {
                    finish();
                } else
                    disconnectRoom();
            } else {
                connectToRoom(accessToken);
                connectActionFab.setBackgroundColor(Color.RED);
            }

        });
    } 

    private void disconnectRoom() {

    }   

    }

В этом коде выше в этом слушателе эти объекты (room,connectActionFab) не найдены, когда я хочу слушать после запуска события сокета. Предположим, я подписался на событие сокета, и когда событие запускается, я слушаю щелчок из представления, но внутри этого прослушивателя щелчка объекты внешнего класса не найдены. Как я могу получить доступ к этим объектам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...