Мой развернутый AWS API Gateway
имеет одну конечную точку:
/users
методом DELETE
. Я пытаюсь вызвать этот метод из своего android app
, используя generated SDK
.
Я развернул API, затем сгенерировал SDK в консоли API Gateway и загрузил свою zip-папку с именем aws-apigateway-api-sdk-1.0.0
. Затем я запустил «mvn install» внутри папки и скопировал сгенерированный файл .jar и библиотеки в свой проект и добавил импорт gradle (в основном я делал все, как в этих инструкциях до пункта 7).
Теперь я хочу создать SDK в своем коде Android. В инструкции делают так:
// 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
, который является интерфейсом. Однако это не кажется правильным классом:
Я все еще пытался использовать 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, и выглядит многообещающе, но я не думаю, что это класс Я должен использовать здесь (но в моей zip-папке не было другого файла .class
, который был сгенерирован API Gateway Generate SDK Method
:
/**
*
*
* @return Empty
*/
@com.amazonaws.mobileconnectors.apigateway.annotation.Operation(path = "/users", method = "DELETE")
Empty usersDelete();
Я также не понимаю, как передать сюда свой параметр запроса username
, но я все же попытался вызвать этот метод. Затем программа аварийно завершает работу в client.usersDelete();
Так что еще, кроме LambdaSimpleProxyClient.class
, я должен использовать там? В моей созданной zip-папке нет другого .class
файла 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)
Любые подсказки приветствуются
Мне пришлось снова запустить «Создать SDK» в моей консоли шлюза API, потому что почему-то параметр запроса, который я добавил, не был в развернутой версии. После повторного развертывания и создания нового SDK я переместил распакованную папку aws-apigateway-api-sdk-1.0.0
в свою папку app
. Затем LambdaSimpleProxyClient.class
был автоматически распознан в вызове factory.build(LambdaSimpleProxyClient.class)
, и я смог передать параметр запроса в метод client.deleteUser("<my-username-value>")
, который теперь принимал переданный параметр String.
Ошибка все еще есть, но я открою для этого новый вопрос.