Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 托管活动中onResume之后的onMessageReceived回调中的片段为null_Android_Chromecast_Google Cast - Fatal编程技术网

Android 托管活动中onResume之后的onMessageReceived回调中的片段为null

Android 托管活动中onResume之后的onMessageReceived回调中的片段为null,android,chromecast,google-cast,Android,Chromecast,Google Cast,当活动已恢复并且我从接收方应用程序收到消息时,对我的片段的引用为null。在最初启动活动时,收到的消息回调可以毫无问题地调用我片段中的方法。但是,一旦应用程序关闭、恢复并且消息回调被重新附加,如果我试图在onResume中保留对片段的引用,片段似乎会返回null或出现“fragment not attached to activity”错误。真正让我困惑的是,onResume函数中的片段不是null,而是messageReceived回调中的片段 这是我的密码: class DashboardC

当活动已恢复并且我从接收方应用程序收到消息时,对我的片段的引用为null。在最初启动活动时,收到的消息回调可以毫无问题地调用我片段中的方法。但是,一旦应用程序关闭、恢复并且消息回调被重新附加,如果我试图在onResume中保留对片段的引用,片段似乎会返回null或出现“fragment not attached to activity”错误。真正让我困惑的是,onResume函数中的片段不是null,而是messageReceived回调中的片段

这是我的密码:

class DashboardCastMainChannel implements Cast.MessageReceivedCallback {
    public String getNamespace() {
        return "urn:x-cast:myapp";
    }
    @Override
    public void onMessageReceived(CastDevice castDevice, String namespace, String message) {
        //Returns null only after activity resume
        DashboardCastFragment fragment = (DashboardCastFragment) getFragmentManager().findFragmentById(R.id.dashboard_main_fragment);
        JSONObject messageJSON;
        try {
            messageJSON= new JSONObject(message);
            fragment.handleMediaMessage(messageJSON); //Crashes because fragment is null after resume
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

}

@Override
protected void onResume () {
    super.onResume();

    //Fragment exists and not null
    mainFragment = (DashboardCastFragment) getFragmentManager().findFragmentById(R.id.dashboard_main_fragment); //Fragment exists and not null

    int playServicesAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 
    if (playServicesAvailable == ConnectionResult.SUCCESS) {
        mediaRouter.addCallback(mediaRouteSelector, mediaRouterCallback, MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);

        //Attach message listener back to activity
        if (castChannel != null) {
            try {
                Cast.CastApi.setMessageReceivedCallbacks(
                        apiClient,
                        castChannel.getNamespace(),
                        castChannel);
            } catch (IOException e) {
                Log.e(TAG, "Exception while creating channel", e);
            } catch (IllegalStateException e) {
                Log.e(TAG, "Failed to setup media channel", e);
            }
        }
    } else {
        GooglePlayServicesUtil.getErrorDialog(playServicesAvailable, this, 1).show();
    }

}

@Override
protected void onPause () {
    mediaRouter.removeCallback(mediaRouterCallback);

    if (castChannel != null) {
        try {
            Cast.CastApi.removeMessageReceivedCallbacks(
                    apiClient,
                    castChannel.getNamespace());
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    super.onPause();
}
这是我的错误日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.rir.dashboardcast.DashboardCastFragment.handleMediaMessage(org.json.JSONObject)' on a null object reference
    at com.rir.dashboardcast.DashboardCastActivity$DashboardCastMainChannel.onMessageReceived(DashboardCastActivity.java:582)
    at com.google.android.gms.internal.ij$c$4.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

提前感谢您

是否有日志要查看?我已编辑了带有错误日志的问题可能尝试调用活动中的处理程序而不是片段?不幸的是,由于我的视图在片段中,我需要在收到消息时更新它们,我别无选择,只能最终从回调调用片段中的函数。