2016-07-24 65 views
2

我正在与neura sdk一起工作,以检测用户(他/她在哪里,他们10分钟前在哪里等)的当前数据。在与Neura建立一个Android项目时收到错误

我想登录到他们的api,然后验证我的用户,但是 - 当我打电话给NeuraApiClient.authenticate(...)时,什么也没有发生。

我跟着neura documentations,但仍然 - 没有任何反应。

这里是我的代码:

public class MainActivity extends AppCompatActivity { 

    private ArrayList<Permission> mPermissions; 
    private AuthenticationRequest mAuthenticateRequest; 

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

     Builder builder = new Builder(this); 
     NeuraApiClient neuraApiClient = builder.build();  
     neuraApiClient.setAppUid(getResources().getString(R.string.app_uid));   
     neuraApiClient.setAppSecret(getResources().getString(R.string.app_secret)); 
     neuraApiClient.connect();  

     fetchPermissions(neuraApiClient); 
     neuraApiClient.authenticate(100, mAuthenticateRequest); 
    } 

    private void fetchPermissions(final NeuraApiClient client) { 
     client.getAppPermissions(new GetPermissionsRequestCallbacks() { 
      @Override 
      public void onSuccess(final List<Permission> permissions) throws RemoteException { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mPermissions = new ArrayList<>(permissions); 
         mAuthenticateRequest = new AuthenticationRequest(); 
         mAuthenticateRequest.setAppId(client.getAppUid()); 
         mAuthenticateRequest.setAppSecret(client.getAppSecret()); 
         mAuthenticateRequest.setPermissions(mPermissions); 
        } 
       }); 
      } 

      @Override 
      public void onFailure(Bundle resultData, int errorCode) throws RemoteException { 
      } 

      @Override 
      public IBinder asBinder() { 
       return null; 
      } 
     }); 
    } 
} 

回答

2

getAppPermissions是一个异步调用,数据是GetPermissionsRequestCallbacks牵强。 在GetPermissionsRequestCallbacks中,您正在启动正在使用验证方法的mAuthenticateRequest。 这意味着你必须等待GetPermissionsRequestCallbacks的,直到的onSuccess被调用,只有这样,你可以调用

neuraApiClient.authenticate(100, mAuthenticateRequest); 

基本上,如果你不等待mAuthenticateRequest需要抓取,你mAuthenticateRequest = NULL认证,并neuraApiClient .authenticate(..)失败。

你可以做这样的事情:打电话验证结果收到时 -

private void fetchPermissions(final NeuraApiClient client) { 
     client.getAppPermissions(new GetPermissionsRequestCallbacks() { 
      @Override 
      public void onSuccess(final List<Permission> permissions) throws RemoteException { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         mPermissions = new ArrayList<>(permissions); 
         mAuthenticateRequest = new AuthenticationRequest(); 
         mAuthenticateRequest.setAppId(client.getAppUid()); 
         mAuthenticateRequest.setAppSecret(client.getAppSecret()); 
         mAuthenticateRequest.setPermissions(mPermissions); 

         client.authenticate(100, mAuthenticateRequest); 
        } 
       }); 
      } 
      ... 
     }); 
    } 
相关问题