Reputation: 3104
I have been able to query AWS DynamoDb and get back results. The results are from a song database and return info like son name, musician, url ect. The amount of results are coming back as expected so I think the query is working correctly. This is probably very basic but I am not sure how I go about retrieving the individual items from the list once I have it.
This is my model:
@DynamoDBTable(tableName = "Music")
public class SongDatabaseMappingAdapter {
private String artist;
private String songtitle;
private String albumtitle;
private String category;
private int musicianrating;
private int userrating;
private String pictureurl;
private String songurl;
@DynamoDBHashKey(attributeName = "Artist")
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
@DynamoDBRangeKey(attributeName = "SongTitle")
public String getSongTitle() {
return songtitle;
}
public void setSongTitle(String songtitle) {
this.songtitle = songtitle;
}
@DynamoDBAttribute(attributeName = "AlbumTitle")
public String getAlbumTitle() {
return albumtitle;
}
public void setAlbumTitle(String albumtitle) {
this.albumtitle = albumtitle;
}
@DynamoDBIndexHashKey(attributeName = "Category", globalSecondaryIndexName = "Category-UserRating-index")
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@DynamoDBAttribute(attributeName = "MusicianRating")
public int getMusicianRating() {
return musicianrating;
}
public void setMusicianRating(int musicianrating) {
this.musicianrating = musicianrating;
}
@DynamoDBIndexRangeKey(attributeName = "UserRating", globalSecondaryIndexName = "Category-UserRating-index")
public int getUserRating() {
return userrating;
}
public void setUserRating(int userrating) {
this.userrating = userrating;
}
@DynamoDBAttribute(attributeName = "PictureURL")
public String getPictureURL() {
return pictureurl;
}
public void setPictureURL(String pictureurl) {
this.pictureurl = pictureurl;
}
@DynamoDBAttribute(attributeName = "SongURL")
public String getSongURL() {
return songurl;
}
public void setSongURL(String songurl) {
this.songurl = songurl;
}
}
And this is my query:
public class getSongsInCategory extends AsyncTask {
@Override
protected Object doInBackground(Object[] params) {
SongDatabaseMappingAdapter songs = new SongDatabaseMappingAdapter();
songs.setCategory("Rap");
String userRatingQueryString = "5";
Condition rangeKeyCondition = new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withN(userRatingQueryString));
DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression()
.withHashKeyValues(songs)
.withIndexName("Category-UserRating-index")
.withRangeKeyCondition("UserRating", rangeKeyCondition)
.withConsistentRead(false);
PaginatedQueryList<SongDatabaseMappingAdapter> result = mapper.query(SongDatabaseMappingAdapter.class, queryExpression);
This is how I have been checking the results:
for (int i = 0; i < result.size(); ++i) {
SongDatabaseMappingAdapter obj = result.get(i);
Log.i("Query Result", "Number"+i+obj.toString());
}
And these are the results I have been getting:
05-22 03:42:12.313 27594-27628/com.amazon.mysampleapp I/Query Result: Number0com.mysampleapp.demo.SongDatabaseMappingAdapter@52ae345c
05-22 03:42:12.313 27594-27628/com.amazon.mysampleapp I/Query Result: Number1com.mysampleapp.demo.SongDatabaseMappingAdapter@52ae520c
05-22 03:42:12.317 27594-27628/com.amazon.mysampleapp I/Query Result: Number2com.mysampleapp.demo.SongDatabaseMappingAdapter@52ae5334
05-22 03:42:12.317 27594-27628/com.amazon.mysampleapp I/Query Result: Number3com.mysampleapp.demo.SongDatabaseMappingAdapter@52ae545c
So i know it is at least partially working but now I want to get the individual parts from the song query and place them into a textviews, imageviews media players ect.
I may be wrong but I think I will have to use the model I created but I am not sure how.
Thanks for your help.
Upvotes: 0
Views: 167
Reputation: 5884
The SongDatabaseMappingAdapter instance has getters? So instead of obj.toString() you do obj.getArtist() etc
Upvotes: 1