AWS Восстановление лица пытается описать коллекцию с помощью BasicAWSCredentials в приложении Android - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать приложение Android, которое может соединиться с AWS Rekognition для лица без использования S3, Cognito или платформы Amplify. Я хочу жестко закодировать мой accessKey и secretKey в приложении. Теперь я сделал очень простой пример приложения, чтобы я мог протестировать функции Rekognition в Android Studio (это основная цель).

Я вызываю объект класса "DoIets", когда я ' нажимаю кнопку. Но я получаю ошибку, и я не вижу ничего плохого. Я разрешаю inte rnet соединения в AndroidManifest. xml, и пользователь с accesKey en secretKey имеет политику AmazonRekognitionFullAccess. В файле Gradle я импортировал 'com.amazon aws: aws - android -sdk-core: 2.10. +', А также 'com.amazon aws: aws - android -sdk-rekognition: 2.10.0 '.

Это класс "DoeIets. java"

import android.util.Log;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.rekognition.AmazonRekognition;
import com.amazonaws.services.rekognition.AmazonRekognitionClient;
import com.amazonaws.services.rekognition.model.DescribeCollectionRequest;
import com.amazonaws.services.rekognition.model.DescribeCollectionResult;

public class DoIets {

public void main() {
    Log.w("Test", "In DoIets Class");

    String collectionId = "MyCollectionName";
    AWSCredentials credentials = new BasicAWSCredentials("MYACCESKEY", "MYSECRETKEY");
    AmazonRekognition rekognitionClient = new AmazonRekognitionClient(credentials);
    rekognitionClient.setRegion(Region.getRegion(Regions.EU_CENTRAL_1));

    DescribeCollectionRequest request = new DescribeCollectionRequest().withCollectionId(collectionId);
    DescribeCollectionResult describeCollectionResult = rekognitionClient.describeCollection(request);

    Log.w("Test", "Face count" + describeCollectionResult.getFaceCount());
}
}

Я получаю следующие ошибки:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: be.example.testing, PID: 10174
java.lang.IllegalStateException: Could not execute method for android:onClick
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:7125)
    at android.view.View.performClickInternal(View.java:7102)
    at android.view.View.access$3500(View.java:801)
    at android.view.View$PerformClick.run(View.java:27336)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7356)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:7125) 
    at android.view.View.performClickInternal(View.java:7102) 
    at android.view.View.access$3500(View.java:801) 
    at android.view.View$PerformClick.run(View.java:27336) 
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
 Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
    at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
    at java.net.InetAddress.getAllByName(InetAddress.java:1152)
    at com.android.okhttp.Dns$1.lookup(Dns.java:41)
    at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:178)
    at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:144)
    at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:86)
    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:176)
    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:262)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:219)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:30)
    at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:162)
    at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:75)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:371)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212)
    at com.amazonaws.services.rekognition.AmazonRekognitionClient.invoke(AmazonRekognitionClient.java:3006)
    at com.amazonaws.services.rekognition.AmazonRekognitionClient.describeCollection(AmazonRekognitionClient.java:762)
    at be.example.testing.DoIets.main(DoIets.java:25)
    at be.example.testing.MainActivity.doIets(MainActivity.java:25)
    at java.lang.reflect.Method.invoke(Native Method) 
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385) 
    at android.view.View.performClick(View.java:7125) 
    at android.view.View.performClickInternal(View.java:7102) 
    at android.view.View.access$3500(View.java:801) 
    at android.view.View$PerformClick.run(View.java:27336) 
    at android.os.Handler.handleCallback(Handler.java:883) 
    at android.os.Handler.dispatchMessage(Handler.java:100) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7356) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
I/Process: Sending signal. PID: 10174 SIG: 9

1 Ответ

1 голос
/ 25 февраля 2020

Похоже, Java недоволен тем, что вы выполняете сетевой запрос (блокирующий вызов) в главном потоке. Выполнение асинхронного метода, скорее всего, решит проблему.

См. Этот связанный вопрос:

android .os.NetworkOnMainThreadException в android .os.StrictMode $ AndroidBlockGuardPolicy.onNetwork ( StrictMode java:. 1145)

...