【问题标题】:How to implement aws api gateway into android?如何在android中实现aws api网关?
【发布时间】:2017-05-12 07:02:32
【问题描述】:

所以我部署了一个 api 并将 sdk 导入到 android 中。我尝试执行一个简单的 GET 方法。我输入userName 并返回给我用户的lastName

调用了 lambda 函数(后端函数),所以我可以连接到它,但我无法获得输出。

这是我的课:

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

        }
    }

在我从 api 网关生成的 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,确实我的后端 lambda 函数正在运行。当我在网关中测试 api 时,它在那里运行。如果有人可以帮助我,那就太棒了!

【问题讨论】:

  • 您能否通过 API Gateway 控制台中的 test-invoke 运行您的 API 方法并发布它返回的正文。

标签: android amazon-web-services aws-lambda aws-sdk aws-api-gateway


【解决方案1】:

如果您熟悉 Retrofit 并且不想切换到 AWS sdk,您可能需要考虑将 AWS Gateway OkHttp Interceptor 添加到您的 OkHttpClient

【讨论】:

    【解决方案2】:

    您是否考虑过使用AWS Gateway for Android

    【讨论】:

    • 我不需要只使用所有的 aws 服务 5。但是,我完成了 aws 教程演练,但没有一个显示在 android 的客户端上做什么才能使其正常工作。跨度>
    猜你喜欢
    • 2015-03-30
    • 2020-07-23
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2020-04-16
    • 2017-05-08
    相关资源
    最近更新 更多