Agora RtcEngine.setClientRole всегда указывает на ноль - PullRequest
0 голосов
/ 25 апреля 2020

Я был озадачен этим кодом на setClientRole. Хотя я уже следил за этим сайтом, создавая приложение для потокового вещания из Android. (https://docs.agora.io/en/Interactive%20Broadcast/start_live_android?platform=Android).

Кажется, я не могу установить setClientRole равным 1 или 2. Он всегда дает нулевую ссылку на объект. Я поместил свой setClientRole в LiveActivity, получив значение от MainActivity.

Вот код в LiveActivity.

public class LiveActivity extends AppCompatActivity {

private int mRole;
private RtcEngine mRtcEngine;
private SurfaceView mLocalView;
private String mRoomName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_live);

    setupLocalVideo();

}
private void setupLocalVideo(){
    Bundle bundle = getIntent().getExtras();

    mRoomName = bundle.getString("cRoom");
    mRole = bundle.getInt("cRole",0);
    mRtcEngine.setClientRole(mRole);
    if(mRole == 2){
        startBroadcast();
    }
}
private void startBroadcast(){
    mRtcEngine.setClientRole(1);
    SurfaceView view;

    view = RtcEngine.CreateRendererView(getBaseContext());
    view.setZOrderMediaOverlay(true);

    mRtcEngine.enableVideo();

}

А вот код для MainActivity:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(selfCheckPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID) &&
            selfCheckPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID) &&
            selfCheckPermission(REQUESTED_PERMISSIONS[2], PERMISSION_REQ_ID)){
        initEngine();
    }else{
        Toast.makeText(getApplicationContext(),"Please accept all permissions to continue",Toast.LENGTH_SHORT).show();
    }

}
public void onClickJoin(View view) {
    // Show a dialog box to choose a user role.
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Choose your role: ");
    builder.setNegativeButton("Audience", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            MainActivity.this.forwardToLiveRoom(2);
        }
    });
    builder.setPositiveButton("Broadcaster", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            MainActivity.this.forwardToLiveRoom(1);
        }
    });
    AlertDialog dialog = builder.create();

    dialog.show();
}

// Get the user role and channel name specified by the user.
public void forwardToLiveRoom(int cRole) {
    final EditText v_room = (EditText) findViewById(R.id.room_name);
    String room = v_room.getText().toString();


    Intent i = new Intent(MainActivity.this, LiveActivity.class);
    i.putExtra("cRoom",room);
    i.putExtra("cRole",cRole);

    startActivity(i);
}


private boolean selfCheckPermission(String permission, int req){
    if(ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(this, REQUESTED_PERMISSIONS, req);
        return false;
    }
    return true;
}

private void initEngine(){
    try {
        mRtcEngine = RtcEngine.create(getBaseContext(), getString(R.string.agora_app_id),mRtcEventHandler);
        setChannelProfile();
    } catch (Exception e) {
        Log.e("agoraerror", Log.getStackTraceString(e));
        throw new RuntimeException("NEED TO check rtc sdk init fatal error\n" + Log.getStackTraceString(e));
    }
}

private void setChannelProfile(){
    mRtcEngine.setChannelProfile(1);
}

А вот и logcat.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.skripsi2/com.example.skripsi2.LiveActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int io.agora.rtc.RtcEngine.setClientRole(int)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3178)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3313)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2026)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:224)
    at android.app.ActivityThread.main(ActivityThread.java:7139)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:536)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int io.agora.rtc.RtcEngine.setClientRole(int)' on a null object reference
    at com.example.skripsi2.LiveActivity.setupLocalVideo(LiveActivity.java:36)
    at com.example.skripsi2.LiveActivity.onCreate(LiveActivity.java:28)
    at android.app.Activity.performCreate(Activity.java:7268)
    at android.app.Activity.performCreate(Activity.java:7259)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1275)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3158)

Любая помощь приветствуется, спасибо.

...