2016-04-06 19 views
0

Ich versuche, Daten von meiner AWS DynamoDB Datenbank zu holen. Ich habe den folgenden Code eingerichtet, bekomme aber Fehler. Unklar, wie von hier vorgehen, um die Daten abzufragen, basierend auf PrimärschlüsselAbfrage von AWS DynamoDB für Android

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import com.amazonaws.auth.CognitoCachingCredentialsProvider; 
import com.amazonaws.regions.Regions; 
import com.amazonaws.services.dynamodbv2.*; 
import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.*; 

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

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

AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider); 
DynamoDBMapper mapper = new DynamoDBMapper(ddbClient); 
+0

Können Sie zu Dynamo db unabhängig von anderem Werkzeug verbinden? –

+0

Ja, ich habe einen separaten Code für die Erstellung der Datenbank und das Einfügen von Daten. Ich versuche jetzt, die Android-Anwendung zu verwenden, um diese Daten aus der Datenbank zu ziehen, sobald es –

+0

gespeichert ist "aber ich bekomme Fehler" ist nicht genug Informationen! Wie erwarten Sie, dass jemand Ihnen helfen kann, ohne zu wissen, was genau der Fehler ist? Bitte lesen Sie dies: http://stackoverflow.com/help/how-to-ask und aktualisieren Sie dann Ihre Frage, um die notwendigen Informationen zu enthalten. –

Antwort

1

ersten Kommentar, es sieht aus wie Sie dies in einer Aktivität versuchen - das wird auf jeden Fall Netz wirft auf Hauptthread Ausnahme in Android .

Zweitens als allgemeine Richtlinie, müssen Sie Variablen in der Klasse eine eigene Klasse mit Ihren DynamoDB Felder einrichten und verknüpft einzurichten. Zum Beispiel:

@DynamoDBTable(tableName = SA_AWSConstants.QUESTIONTABLENAME) 
public class SA_Question implements Comparable<SA_Question> { 

    // fields coming from AWS table 
    private String questionguid_str; // : STRING, PRIMARY HASH KEY 
    private String json_str; 
    private long ordinalposition_int; 

    ... 

    @DynamoDBHashKey(attributeName = SA_AWSConstants.DBSCHEMA_QUESTIONGUID) 
    public String getQuestionguid_str() { 
     return questionguid_str; 
    } 

    public void setQuestionguid_str(String questionguid_str) { 
     this.questionguid_str = questionguid_str; 
    } 

    @DynamoDBRangeKey(attributeName = SA_AWSConstants.DBSCHEMA_ORDINALPOS) 
    public long getOrdinalposition_int() { 
     return ordinalposition_int; 
    } 

    public void setOrdinalposition_int(long ordinalposition_int) { 
     this.ordinalposition_int = ordinalposition_int; 
    } 

    @DynamoDBAttribute(attributeName = SA_AWSConstants.DBSCHEMA_QUESTION_JSONSTR) 
    public String getJson_str() { 
     return json_str; 
    } 

    public void setJson_str(String json_str) { 
     this.json_str = json_str; 
    } 
} 

Dann können Sie etwas tun:

   DynamoDBMapper mapper = new DynamoDBMapper(ddb); 
       DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); 

       PaginatedScanList<SA_Question> paginatedq = mapper.scan(SA_Question.class, scanExpression); 
       ArrayList<SA_Question> awsqlist = new ArrayList<SA_Question>(); 

       for (SA_Question q : paginatedq) { 
        q.initiateFromJSON(); 
        awsqlist.add(q); 
       } 

Sie müssen darauf achten, die Grenzen AWS auf die Renditen von Daten mit einer einzigen Abfrage setzt (daher der PaginatedScan - wenn Sie erwarten, das Limit zu überschreiten, dann müssen Sie prüfen, ob weitere Daten vorhanden sind, die zurückgegeben werden sollen.

+0

danke für die Hilfe, ich bekam die Netzwerk auf Main Thread Ausnahme. Was sind die SA_AWSConstants, die Sie verwenden? Ich bekomme auch "kann Methode 'initiateFromJSON()" nicht auflösen, auch wie würden Sie SA_Question q: paginatedq ohne die erweiterte for-Schleife. Dank –

+1

Der Code, den ich geschrieben war ein Beispiel von einem persönlichen Projekt - initiatefromJSON() wurde eine Funktion von SA_Question habe ich nicht aus Gründen der Übersichtlichkeit in der Post enthalten. Sie können die SA_Question-Klasse oder die for ...-Schleife nicht direkt kopieren, Sie müssen sie für Ihre spezifische Tabelle ändern. – heights1976

+0

Können Sie dies als richtig markieren, wenn es Ihnen geholfen hat? – heights1976