2016-07-10 5 views
0

Ich versuche, die genaue DynamoDB Beispiel für die Bücher DB (http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/dynamodb_om.html), aber meine apps Abstürze amAndroid DynamoDB mapper.save Absturz

mapper.save(book) 

Schritt (es funktioniert zu folgen, wenn ich diese Zeile auskommentieren).

Bitte überprüfen Sie unten und helfen Sie mir herauszufinden, was das Problem ist. Vielen Dank ! Hier

ist die Fehlermeldung:

07-09 20: 00: 03,652 2458-2458/com.aegisofsoteria.aegisofsoteria D/CognitoCachingCredentialsProvider: Laden Anmeldeinformationen von SharedPreferences 07-09 20: 00: 03,652 2458-2458/com.aegisofsoteria.aegisofsoteria D/CognitoCachingCredentialsProvider: Keine gültigen Anmeldeinformationen in SharedPreferences gefunden 07-09 20: 00: 03.673 2458-2458/com.aegisofsoteria.aegisofsoteria D/AndroidRuntime: Herunterfahren der VM 07-09 20: 00: 03.674 2458-2458/com.aegisofsoteria.aegisofsoteria E/AndroidRuntime: FATALE AUSNAHME: Haupt Prozess: com.aegisofsoteria.aegi sofsoteria, PID: 2458 java.lang.RuntimeException: Kann Aktivität starten ComponentInfo {com.aegisofsoteria.aegisofsoteria/com.aegisofsoteria.aegisofsoteria.SignInActivity}: android.os.NetworkOnMainThreadException bei android.app.ActivityThread.performLaunchActivity (ActivityThread. Java: 2416) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThread.java : 1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread.java:5417) bei java.lang.reflect.Method.invoke (native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 726) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) verursacht durch: android.os.NetworkOnMainThreadException bei android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1273) bei java.net.InetAddress.lookupHostByName (InetAddress.java:431) bei java.net.InetAddress.getAllByNameImpl (InetAddress.java:252) bei java.net.InetAddress.getAllByName (I netAddress.java:215) bei com.android.okhttp.internal.Network $ 1.resolveInetAddresses (Network.java:29) bei com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:188) bei com.android.okhttp.internal.http.RouteSelector.nextProxy (RouteSelector.java:157) bei com.android.okhttp.internal.http.RouteSelector.next (RouteSelector.java:100) bei com.android.okhttp .internal.http.HttpEngine.createNextConnection (HttpEngine.java:357) bei com.android.okhttp.internal.http.HttpEngine.nextConnection (HttpEngine.java:340) bei com.android.okhttp.internal.http.HttpEngine .connect (HttpEngine.java:330) bei com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:248) bei com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.Java: 433) bei com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:114) bei com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream (HttpURLConnectionImpl.java:245) bei com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream (DelegatingHttpsURLConnection.java:218) bei com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream (HttpsURLConnectionImpl.java) bei com.amazonaws.http.UrlHttpClient. writeContentToConnection (UrlHttpClient.java:128) bei com.amazonaws.http.UrlHttpClient.execute (UrlHttpClient.java:65) bei com.amazonaws.http.AmazonHttpClient.exec uteHelper (AmazonHttpClient.java:356) bei com.amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:199) bei com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke (AmazonCognitoIdentityClient.java:558) bei com. amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId (AmazonCognitoIdentityClient.java:444) bei com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId (AWSAbstractCognitoIdentityProvider.java:172) bei com.amazonaws.auth.CognitoCredentialsProvider.getIdentityId (CognitoCredentialsProvider.java: 340) bei com.amazonaws.auth.CognitoCachingCredentialsProvider.getIdentityId (CognitoCachingCredentialsProvider.java:422) bei com.aegisofsoteria.aegisofsoteria.SignInActivity.BookDBExample (SignInActivity.java:203) bei com.aegisofsoteria.aegisofsoteria.SignInActivity.onStart (SignInActivity.java:124) bei android.app.Instrumentation.callActivityOnStart (Instrumentation.java: 1237) bei android.app.Activity.performStart (Activity.java:6253) bei android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2379) bei android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) bei android.app.ActivityThread.-wrap11 (ActivityThread.java) bei android.app.ActivityThread $ H.handleMessage (ActivityThrea djava:1344) bei android.os.Handler.dispatchMessage (Handler.java:102) bei android.os.Looper.loop (Looper.java:148) bei android.app.ActivityThread.main (ActivityThread. java: 5417) bei java.lang.reflect.Method.invoke (Native Methode) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) bei com.android.internal.os .ZygoteInit.main (ZygoteInit.java:616)


ist hier mein Code:

es ist innen

public class SignInActivity extends AppCompatActivity implements 
    GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { 

und der Code ist wie folgt:

 private void BookDBExample(){ 
    // Initialize the Amazon Cognito credentials provider 

    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
      getApplicationContext(), 
      my_PollID_here, // Identity Pool ID 
      Regions.US_EAST_1 // Region 
    ); 

    Toast.makeText(getApplicationContext(), "my ID" + credentialsProvider.getIdentityId(), Toast.LENGTH_SHORT).show(); 

    AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider); 

    DynamoDBMapper mapper = new DynamoDBMapper(ddbClient); 
    Book book = new Book(); 
    book.setTitle("Great Expectations"); 
    book.setAuthor("Charles Dickens"); 
    book.setPrice(1299); 
    book.setIsbn("1234567890"); 
    book.setHardCover(false); 
    try { 
     mapper.save(book); 
    } catch (AmazonServiceException ase) { 
     // The conditional check failed. 
     Toast.makeText(getApplicationContext(), "ASE:" + ase.getMessage(), Toast.LENGTH_LONG).show(); 
    } catch (AmazonClientException ace){ 
     Toast.makeText(getApplicationContext(), "ACE:" + ace.getMessage(), Toast.LENGTH_LONG).show(); 
    } 
    } 

Zwei Dinge, die als Hinweis dienen kann:

  1. auch der Fehler fangen kann es nicht stoppen vor dem Absturz. Warum ?

  2. Was bedeutet "Keine gültigen Anmeldeinformationen in SharedPreferences"? Ich habe die Cognito, IAM, DB genau wie das AWS-Beispiel eingerichtet, und der einzige Unterschied ist, dass ich "Anfügen von Rollenrichtlinien" auf IAM nicht finden kann. Die Optionen sind "Richtlinie anhängen" oder "Rollenrichtlinie erstellen". Also muss ich "Create Role Policy" verwenden, um diesen spezifischen Schritt abzuschließen.

Danke.

Antwort

1

Die Ursache ist NetworkOnMainThreadException. Kurz gesagt, Sie müssen mapper.save() von einem Hintergrundthread aufrufen, sagen wir es in eine AsyncTask einwickeln.

Die Ausnahme, die ausgelöst wird, wenn eine Anwendung versucht, eine Netzwerkoperation auf ihrem Hauptthread auszuführen.

Dies wird nur für Anwendungen ausgelöst, die auf das Honeycomb SDK oder höher zielen. Anwendungen, die auf frühere SDK-Versionen abzielen, dürfen Netzwerke auf ihren Main-Event-Loop-Threads verwenden, aber es wird stark davon abgeraten. Siehe das Dokument Design for Responsiveness.

+0

Danke. Es klappt. –