Я был озадачен этим кодом на 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)
Любая помощь приветствуется, спасибо.