【发布时间】:2017-09-27 05:14:23
【问题描述】:
我的表有两列,即国家城市,有 3 个条目,其哈希键相同,分别是印度孟买、印度德里、印度班加罗尔(在 aws dynamodb 中手动检查),其余各不相同,例如日本东京。我希望通过我的 android 应用程序获得计数 3。 这是我的代码:-
public class MainActivity extends AppCompatActivity {
Button buttonRetrieve;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonRetrieve = (Button) findViewById(R.id.btn_retrievedata);
buttonRetrieve.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new RetrieveData().execute();
}
});
}
private class RetrieveData extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//Toast.makeText(MainActivity.this, "in do in background", Toast.LENGTH_SHORT).show();
try {
Manager manager = new Manager();
CognitoCredentialsProvider credentialsProvider = manager.getCredentials(MainActivity.this);
Mapper mapperClass = new Mapper();
if (credentialsProvider != null && mapperClass != null) {
DynamoDBMapper dynamoDBMapper = manager.initDynamoClient((CognitoCachingCredentialsProvider) credentialsProvider);
DynamoDBQueryExpression dynamoDBQueryExpression = new DynamoDBQueryExpression().withLimit(5).withHashKeyValues("India")
.withRangeKeyCondition("City", new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue()
.withS("Mumbai")));
int s = dynamoDBMapper.count(Mapper.class, dynamoDBQueryExpression);
Toast.makeText(MainActivity.this, "the entries are " + s, Toast.LENGTH_SHORT).show();
} else {
return "h";
}
return "m";
} catch (DynamoDBMappingException ex)
{
ex.printStackTrace();
return "k";
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result.equals("h")) {
Toast.makeText(MainActivity.this, "Already Existing", Toast.LENGTH_LONG).show();
} else if (result.equals("m")) {
Toast.makeText(MainActivity.this, "Retrieved data successfully :)", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "**Exception Caught**", Toast.LENGTH_SHORT).show();
}
}
}
}
我尝试使用上面的代码检索 1 个值,其中国家为“印度”,城市为“孟买”,但它显示以下错误:-
com.example.dynamo1 I/DpmTcmClient: RegisterTcmMonitor from: com.android.okhttp.TcmIdleTimerMonitor
04-29 07:36:41.192 971-1084/com.example.dynamo1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
Process: com.example.dynamo1, PID: 971
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalArgumentException: Illegal query expression: No hash key condition is found in the query
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.processKeyConditions(DynamoDBMapper.java:2420)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression(DynamoDBMapper.java:2382)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.count(DynamoDBMapper.java:2292)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.count(DynamoDBMapper.java:2274)
at com.example.dynamo1.MainActivity$RetrieveData.doInBackground(MainActivity.java:61)
at com.example.dynamo1.MainActivity$RetrieveData.doInBackground(MainActivity.java:41)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
04-29 07:36:41.402 971-1025/com.example.dynamo1 D/OpenGLRenderer: endAllStagingAnimators on 0x5579967990 (RippleDrawable) with handle 0x5579a
提前致谢!
【问题讨论】:
标签: java android amazon-web-services amazon-dynamodb