2016-07-10 3 views
0

Я пытаюсь следовать точному примеру DynamoDB для книги БД (http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/dynamodb_om.html), но мои приложения авария на этапеAndroid DynamoDB mapper.save аварии

mapper.save(book) 

(это работает, если я закомментировать эту строку).

Просмотрите ниже и помогите мне выяснить, в чем проблема. Спасибо !

Вот сообщение об ошибке:

07-09 20: 00: 03,652 2458-2458/com.aegisofsoteria.aegisofsoteria D/CognitoCachingCredentialsProvider: Загрузка учетных данных от SharedPreferences 07-09 20: 00: 03.652 2458-2458/com.aegisofsoteria.aegisofsoteria D/CognitoCachingCredentialsProvider: Нет действительных учетных данных, найденных в SharedPreferences 07-09 20: 00: 03.673 2458-2458/com.aegisofsoteria.aegisofsoteria D/AndroidRuntime: выключение VM 07-09 20: 00: 03.674 2458-2458/com.aegisofsoteria.aegisofsoteria E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.aegisofsoteria.aegi sofsoteria, ПИД: 2458 java.lang.RuntimeException: Невозможно запустить активность ComponentInfo {com.aegisofsoteria.aegisofsoteria/com.aegisofsoteria.aegisofsoteria.SignInActivity}: android.os.NetworkOnMainThreadException в android.app.ActivityThread.performLaunchActivity (ActivityThread. java: 2416) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) at android.app.ActivityThread.-wrap11 (ActivityThread.java) at android.app.ActivityThread $ H.handleMessage (ActivityThread.java : 1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) at android.app.ActivityThread.main (ActivityThread.java:5417) в java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java: 726) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Вызванный: android.os.NetworkOnMainThreadException в android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1273) на java.net.InetAddress.lookupHostByName (InetAddress.java:431) на java.net.InetAddress.getAllByNameImpl (InetAddress.java:252) на java.net.InetAddress.getAllByName (I netAddress.java:215) at com.android.okhttp.internal.Network $ 1.resolveInetAddresses (Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:188) на com.android.okhttp.internal.http.RouteSelector.nextProxy (RouteSelector.java:157) на com.android.okhttp.internal.http.RouteSelector.next (RouteSelector.java:100) на com.android.okhttp .internal.http.HttpEngine.createNextConnection (HttpEngine.java:357) at com.android.okhttp.internal.http.HttpEngine.nextConnection (HttpEngine.java:340) at com.android.okhttp.internal.http.HttpEngine .connect (HttpEngine.java:330) at com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:248) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.Java: 433) в com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:114) на com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream (HttpURLConnectionImpl.java:245) на com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream (DelegatingHttpsURLConnection.java:218) на com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream (HttpsURLConnectionImpl.java) в com.amazonaws.http.UrlHttpClient. writeContentToConnection (URL-адрес: http: uteHelper (AmazonHttpClient.java:356) в com.amazonaws.http.AmazonHttpClient.execute (AmazonHttpClient.java:199) в com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke (AmazonCognitoIdentityClient.java:558) на ком. amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId (AmazonCognitoIdentityClient.java:444) на com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId (AWSAbstractCognitoIdentityProvider.java:172) на com.amazonaws.auth.CognitoCredentialsProvider.getIdentityId (CognitoCredentialsProvider.java: 340) at com.amazonaws.auth.CognitoCachingCredentialsProvider.getIdentityId (CognitoCachingCredentialsProvider.java:422) на com.aegisofsoteria.aegisofsoteria.SignInActivity.BookDBExample (SignInActivity.java:203) в com.aegisofsoteria.aegisofsoteria.SignInActivity.onStart (SignInActivity.java:124) в android.app.Instrumentation.callActivityOnStart (Instrumentation.java: 1237) на android.app.Activity.performStart (Activity.java:6253) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2379) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThrea d.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread. java: 5417) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os .ZygoteInit.main (ZygoteInit.java:616)


Вот мой код:

он находится внутри

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

и код выглядит следующим образом:

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

Две вещи, которые могут действовать как намек:

  1. даже подвох ошибка не может остановить его от аварии. Зачем ?

  2. В чем смысл «Нет действительных учетных данных, найденных в SharedPreferences»? Я настроил Cognito, IAM, DB точно так же, как пример AWS, и единственное различие заключается в том, что я не могу найти «Attach Role Policy» на IAM. Возможные варианты: «Политика присоединения» или «Создать политику ролей». Поэтому я должен использовать «Создать политику ролей», чтобы завершить этот конкретный шаг.

Спасибо.

ответ

1

Основной причиной является NetworkOnMainThreadException. Короче говоря, вам нужно вызвать mapper.save() из фонового потока, скажем, обернуть его в AsyncTask.

Исключение, возникающее при попытке приложения выполнить сетевую операцию в своем основном потоке.

Это делается только для приложений, предназначенных для сотового SDK или выше. Приложениям, использующим более ранние версии SDK, разрешено создавать сети в своих основных потоках цикла событий, но в значительной степени обесценивается . См. Документ «Разработка для реагирования».

+0

Спасибо. Оно работает. –

Смежные вопросы