2016-07-24 11 views
2

Ich arbeite mit neura sdk, um aktuelle Daten eines Benutzers (wo er/sie ist, wo waren sie vor 10 Minuten usw.) zu erkennen.Fehler beim Erstellen eines Android-Projekts mit Neura

Ich möchte mich in ihre API einloggen und meinen Benutzer authentifizieren, jedoch - wenn ich NeuraApiClient.authenticate (...) anrufe passiert nichts.

Ich folgte neura documentations, aber immer noch - nichts passiert.

Hier ist mein Code:

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; 
      } 
     }); 
    } 
} 

Antwort

2

getAppPermissions ein asynchroner Aufruf ist, und die Daten abgerufen, auf GetPermissionsRequestCallbacks. In GetPermissionsRequestCallbacks initiieren Sie mAuthenticateRequest, das die Authentifizierungsmethode verwendet. Was bedeutet, dass Sie, bis onSuccess von GetPermissionsRequestCallbacks genannt wird, und nur dann können Sie rufen

neuraApiClient.authenticate(100, mAuthenticateRequest); 

Grundsätzlich warten müssen, wenn Sie abgeholt werden nicht für mAuthenticateRequest warten, Sie mit mAuthenticateRequest = null authentifizieren und neuraApiClient .authenticate (..) schlägt fehl.

Sie können etwas tun: Rufen Sie authentifizieren, wenn die Ergebnisse empfangen werden -

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); 
        } 
       }); 
      } 
      ... 
     }); 
    }