0

私のデプロイにAWS API Gatewayは 1 つのエンドポイントがあります: メソッド/usersを使用します。を使用してDELETEこのメ​​ソッドを呼び出そうとしています。API をデプロイし、API Gateway コンソールで SDK を生成し、.zip という名前のフォルダーをダウンロードしました。次に、フォルダー内で「mvn install」を実行し、生成された .jar ファイルとライブラリをプロジェクトにコピーし、gradle インポートを追加しました (基本的に、ポイント 7 までこれらの手順に従ってすべてを行いました)。android appgenerated SDKaws-apigateway-api-sdk-1.0.0

ここで、Android コードで SDK を作成したいと考えています。指示では、彼らはこのようにします:

// Create an instance of your SDK. Here, 'SimpleCalcClient.java' is the compiled java class for the SDK generated by API Gateway.
final SimpleCalcClient client = factory.build(SimpleCalcClient.class);

私の問題はこれですSimpleCalcClient.class->これを自分の値に置き換える必要があることはわかっていますが、生成されたターゲットフォルダーにLambdaSimpleProxyClient.classは、インターフェイスである という名前のクラスしか見つかりませんでした。ただし、これは適切なクラスではないようです。

生成された LambdaSimpleProxyClient.class

私はまだこのクラスで を使用しようとしましたがApiClientFactory、今のコードは次のようになります。

public void deleteUser(View view) {
        ApiClientFactory factory = new ApiClientFactory();
        final LambdaSimpleProxyClient client = factory.build(LambdaSimpleProxyClient.class);
        client.usersDelete();
}

LambdaSimpleProxyClass.javaを実行したときにステップ 5 で生成されました。mvn installメソッドusersDelete()が含まれています。これは、API エンドポイントの呼び出し方法に適合し、有望に見えるため、理にかなっていますが、それが使用すべきクラスであるとは思いません。ここ(ただし.class、私のzipフォルダーには、によって生成された他のファイルはありませんでしたAPI Gateway Generate SDK Method

/**
     *
     *
     * @return Empty
     */
    @com.amazonaws.mobileconnectors.apigateway.annotation.Operation(path = "/users", method = "DELETE")
    Empty usersDelete();

ここでクエリ パラメータを渡す方法もわかりませんがusername、それでもこのメソッドを呼び出そうとしました。その後、プログラムは client.usersDelete(); でクラッシュします。

それで、私はそこで何LambdaSimpleProxyClient.classを使うべきですか?.class生成された zip フォルダーaws-apigateway-api-sdk-1.0.0または maven によって生成されたターゲット フォルダーには、他のファイルはありません。

2020-12-21 20:59:32.427 5340-5340/de.stuttgart.syzl3000 D/ProfileActivity: deleteAccount: delete Btn clicked
2020-12-21 20:59:32.441 5340-5340/de.stuttgart.syzl3000 D/AndroidRuntime: Shutting down VM
2020-12-21 20:59:32.445 5340-5340/de.stuttgart.syzl3000 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.stuttgart.syzl3000, PID: 5340
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     Caused by: com.amazonaws.mobileconnectors.apigateway.ApiClientException:  (Service: null; Status Code: 0; Error Code: null; Request ID: null)
        at com.amazonaws.mobileconnectors.apigateway.ApiClientHandler.invoke(ApiClientHandler.java:118)
        at java.lang.reflect.Proxy.invoke(Proxy.java:913)
        at $Proxy1.usersDelete(Unknown Source)
        at de.stuttgart.syzl3000.menu.ProfileActivity.deleteAccount(ProfileActivity.java:49)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
        at java.net.InetAddress.getAllByName(InetAddress.java:787)
        at com.android.okhttp.Dns$1.lookup(Dns.java:39)
        at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
        at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
        at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
        at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseMessage(HttpURLConnectionImpl.java:534)
        at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseMessage(DelegatingHttpsURLConnection.java:109)
        at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseMessage(Unknown Source:0)
        at com.amazonaws.http.UrlHttpClient.createHttpResponse(UrlHttpClient.java:92)
        at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:85)
        at com.amazonaws.mobileconnectors.apigateway.ApiClientHandler.invoke(ApiClientHandler.java:109)
        at java.lang.reflect.Proxy.invoke(Proxy.java:913) 
        at $Proxy1.usersDelete(Unknown Source) 
        at de.stuttgart.syzl3000.menu.ProfileActivity.deleteAccount(ProfileActivity.java:49) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
        at android.view.View.performClick(View.java:6256) 
        at android.view.View$PerformClick.run(View.java:24701) 
        at android.os.Handler.handleCallback(Handler.java:789) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6541) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

どんなヒントでも大歓迎です

4

1 に答える 1

0

API Gateway コンソールで「SDK の生成」を再度実行する必要がありました。なぜかというと、追加したクエリ パラメータがデプロイされたバージョンに含まれていなかったからです。再度デプロイして新しい SDK を生成した後、解凍したフォルダーaws-apigateway-api-sdk-1.0.0を自分のappフォルダーに移動しました。その後、呼び出しLambdaSimpleProxyClient.classで自動的に認識され、渡された文字列パラメーターを受け入れるようになっfactory.build(LambdaSimpleProxyClient.class)たメソッドにクエリパラメーターを渡すことができました。client.deleteUser("<my-username-value>")

まだエラーがありますが、そのために新しい質問を開きます。

于 2020-12-21T21:27:24.770 に答える