2016-07-24 25 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); 
        } 
       }); 
      } 
      ... 
     }); 
    } 
相關問題