您可以检查几件事:
您是否 按照Neura 开发网站中的说明声明了 initNueraConnection()和fetchPermissions()?
如果是这样,我怀疑您正在发送 authenticate(...) 一个可为空的 mAuthenticateRequest 实例。由于 fetchPermissions() 是异步的(它是一个网络调用),因此您在从 fetchPermissions() 获取结果之前调用了 authenticate(...),因此 mAuthenticateRequest 为空,因为它尚未启动。只有在您收到 fetchPermissions() 上的数据后,您才应该调用 authenticate(...)。
例如,您可以这样做:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getMainActivity().initNeuraConnection();
fetchPermissions();
}
private void fetchPermissions() {
loadProgress(true);
getMainActivity().getClient().getAppPermissions(new GetPermissionsRequestCallbacks() {
@Override
public void onSuccess(final List<Permission> permissions) throws RemoteException {
if (getActivity() == null)
return;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
loadProgress(false);
mPermissions = new ArrayList<>(permissions);
mAuthenticateRequest = new AuthenticationRequest();
mAuthenticateRequest.setAppId(getMainActivity().getClient().getAppUid());
mAuthenticateRequest.setAppSecret(getMainActivity().getClient().getAppSecret());
mAuthenticateRequest.setPermissions(mPermissions);
getMainActivity().getClient().authenticate(NEURA_AUTHENTICATION_REQUEST_CODE, mAuthenticateRequest);
}
});
}
@Override
public void onFailure(Bundle resultData, int errorCode) throws RemoteException {
loadProgress(false);
mRequestPermissions.setEnabled(true);
}
@Override
public IBinder asBinder() {
return null;
}
});
}
仅供参考,您可以检查您的 logcat 是否存在此错误: authenticationRequest 可以为空,无法创建身份验证请求。