找不到Android内部网络回调事件外部变量

时间:2018-10-31 06:04:07

标签: java android sockets websocket

   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)。假设我订阅了一个套接字事件,并且在触发该事件时,我正在侦听来自视图的单击,但是在此单击侦听器内部未找到外部类对象。我该如何访问那些对象。

0 个答案:

没有答案