1

Итак, я развернул api и импортировал sdk в android. Я попытался выполнить простой метод GET. Там, где я вводил userName, он возвращает мне lastName.Как реализовать aws-api-шлюз в android?

Вызывается функция лямбда (функция backend), поэтому я могу подключиться к ней, но им не удалось получить выход.

Вот мой класс:

public class SampleGet extends AppCompatActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_log_in); 

     gatewayButton = (Button) findViewById(R.id.cognito_gatewayButton); 
     gatewayButton.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       gateWayAsyncTask gateWayAsyncTask = new gateWayAsyncTask(); 
       gateWayAsyncTask.execute(); 

      } 
     }); 
    } 

    class gateWayAsyncTask extends AsyncTask<Void, Void, Void> 
    { 
     private String userName; 
     @Override 
     protected Void doInBackground(Void... params) 
     { 
      //gateway 
      creatingUser = clientFactory.build(MyUserClient.class); 
      userName = creatingUser.rootGet("SampleUserName").getLastName; 
      return null; 
     } 
     @Override 
     public void onPostExecute(Void var) 
     { 
      Log.d("gateway","gateway succeded!"); 
      if(userName == null) 
      { 
       Log.d("gateway","username is null"); 
      } 
      else if(userName.equals("")) 
      { 
       Log.d("gateway","username is empty"); 
      } 
      else 
      { 
       Log.d("gateway",userName); 
      } 

     } 
    } 

В SDK я генерируемой из апи шлюза здесь есть класс клиента:

@com.amazonaws.mobileconnectors.apigateway.annotation.Service(endpoint = "https://ow2zhiry2b.execute-api.us-west-2.amazonaws.com/test5") 

public interface MyUserClient { 


    /** 
    * A generic invoker to invoke any API Gateway endpoint. 
    * @param request 
    * @return ApiResponse 
    */ 
    com.amazonaws.mobileconnectors.apigateway.ApiResponse execute(com.amazonaws.mobileconnectors.apigateway.ApiRequest request); 

    /** 
    * 
    * 
    * @param username 
    * @return AndroidOutput 
    */ 
    @com.amazonaws.mobileconnectors.apigateway.annotation.Operation(path = "/", method = "GET") 
    AndroidOutput rootGet(
      @com.amazonaws.mobileconnectors.apigateway.annotation.Parameter(name = "username", location = "query") 
      String username); 

} 

Вот класс AndroidOuput, который также был создан:

public class AndroidOutput { 
    @com.google.gson.annotations.SerializedName("items") 
    private String items = null; 

    /** 
    * Gets items 
    * 
    * @return items 
    **/ 
    public String getItems() { 
     return items; 
    } 

    /** 
    * Sets the value of items. 
    * 
    * @param items the new value 
    */ 
    public void setItems(String items) { 
     this.items = items; 
    } 

} 

Итак, журнал, который выходит, username is null, и я понятия не имею, почему. Я проверил cloudwatch, и действительно моя бэкендная функция лямбда работает. И когда я тестирую api в шлюзе, он там бегал. Если бы кто-нибудь мог помочь мне, это было бы здорово !!

+0

Можете ли вы запустить свой метод API с помощью тестового вызова в консоли API Gateway и отправить тело, которое оно возвращает. –

ответ

0

Считаете ли вы использование AWS Gateway for Android?

+0

Мне не нужно использовать все службы aws только 5. Но, ive сделал ознакомительные прошивки aws, но ни один из них не показывает, что делать на стороне клиента в android, чтобы заставить его работать. –

1

Если вы знакомы с дооснащением и не хотите переключаться на AWS sdk, вы можете подумать о добавлении AWS Gateway OkHttp Interceptor к вашему OkHttpClient.

Смежные вопросы